Menyembunyikan output dari perintah shell biasanya melibatkan redirect stderr dan stdout. Apakah ada fasilitas atau perintah builtin yang secara default menyembunyikan output tetapi pada kesalahan dumps semua akumulasi output? Saya ingin menjalankan ini sebagai pembungkus untuk ssh
perintah jarak jauh . Sekarang saya memiliki mereka menggunakan pengalihan tetapi saya tidak mendapatkan petunjuk tentang apa yang membuat mereka gagal, dan mereka terlalu bertele-tele.
EDIT: Pada akhirnya saya membuat template berikut berdasarkan jawaban oleh @Belmin yang saya tweak sedikit untuk mengakumulasi semua perintah sebelumnya dari skrip, gunakan pengenal proses saat ini, secara otomatis menghapus log, dan menambahkan kegagalan kesalahan merah pesan saat terjadi kesalahan. Dalam templat ini silent
pembungkus awal akan berhasil, kemudian gagal perintah ketiga karena direktori sudah ada:
#!/bin/sh
set -e
SILENT_LOG=/tmp/silent_log_$$.txt
trap "/bin/rm -f $SILENT_LOG" EXIT
function report_and_exit {
cat "${SILENT_LOG}";
echo "\033[91mError running command.\033[39m"
exit 1;
}
function silent {
$* 2>>"${SILENT_LOG}" >> "${SILENT_LOG}" || report_and_exit;
}
silent mkdir -v pepe
silent mkdir -v pepe2
silent mkdir -v pepe
silent mkdir -v pepe2
2>&1
, seperti:$* >>"${SILENT_LOG}" 2>&1" || report_and_exit