Apa cara terbaik untuk menekan output (stdout dan stderr) kecuali program keluar dengan kode bukan nol? Saya berpikir:
quiet_success()
{
file=$(mktemp)
if ! "$@" > "$file" 2>&1; then
cat "$file"
fi
rm -f "$file"
}
Dan jalankan quiet_success my_long_noisy_script.sh
tetapi saya tidak yakin apakah ada cara yang lebih baik. Saya merasa ini harus menjadi sesuatu yang harus dilakukan orang lain.
Untuk konteks, saya ingin menambahkan ini ke skrip cron saya sehingga saya bisa diemail dengan semuanya jika gagal, tetapi tidak jika tidak.
shell-script
cron
io-redirection
dimo414
sumber
sumber
sh
sintaks yang valid , dan urutan pengalihan Anda mundur (lakukan> "$file" 2>&1
dan gunakan lebih banyak kutipan).Jawaban:
Anda harus buffer output di suatu tempat tidak peduli apa, karena Anda harus menunggu kode keluar untuk mengetahui apa yang harus dilakukan. Sesuatu seperti ini mungkin paling mudah:
sumber
set -o xtrace
skrip shell Anda maka semua output akan ada lagi sebagai bagian dari pendataan detail tugasoutput=...
:-). Dalam hal ini mungkin lebih baik digunakanchronic
.The
moreutils
paket berisi programchronic
untuk tujuan ini. Anda hanya menyebutnya sepertiSangat berguna dalam pekerjaan cron.
sumber
chronic
untukcronic
, yang merupakan program serupa yang menekan output kecuali ada perintah dengan kode non-nol atau menghasilkan output kesalahan standar .