อะไรคือวิธีที่ดีที่สุดในการระงับเอาต์พุต (stdout และ stderr) ยกเว้นว่าโปรแกรมออกด้วยรหัสที่ไม่ใช่ศูนย์ ฉันกำลังคิด:
quiet_success()
{
file=$(mktemp)
if ! "$@" > "$file" 2>&1; then
cat "$file"
fi
rm -f "$file"
}
และวิ่งquiet_success my_long_noisy_script.sh
แต่ฉันไม่แน่ใจว่ามีวิธีที่ดีกว่า ฉันรู้สึกว่าสิ่งนี้จะต้องเป็นสิ่งที่คนอื่น ๆ ต้องทำ
สำหรับบริบทฉันต้องการเพิ่มสคริปต์ cron ของฉันเพื่อที่ฉันจะได้รับอีเมลทุกอย่างหากพวกเขาล้มเหลว แต่ไม่ใช่ถ้าพวกเขาทำไม่ได้
ใช่ฉันเพิ่งพิมพ์มันขึ้นมาในคำถาม ใช้คำแนะนำของคุณและฉันเห็นด้วยคำสั่งควรจะรับผิดชอบ แต่นั้นอนิจจา ...
—
dimo414
เพียงบันทึกไวยากรณ์: ไม่จำเป็นต้องใส่วงเล็บล้อมรอบคำสั่ง
—
จัดการ
sh
ไวยากรณ์ที่ถูกต้องจริงและลำดับการเปลี่ยนเส้นทางของคุณเป็นไปข้างหลัง (ทำ> "$file" 2>&1
และใช้คำพูดมากขึ้น)