Bir kabuk komutunun çıktısını gizlemek genellikle stderr ve stdout'un yönlendirilmesini içerir. Varsayılan olarak çıktıyı gizleyen ancak hata durumunda biriken tüm çıktıyı döken yerleşik bir tesis veya komut var mı? Bunu uzaktan ssh
komutlar için bir sarıcı olarak çalıştırmak istiyorum . Şimdi onları yeniden yönlendirmeyi kullanıyorum ama onları neyin başarısız kıldığı konusunda bir fikrim yok ve bunlar çok ayrıntılı.
DÜZENLEME: Sonunda komuttan önceki tüm komutları biriktirmek, geçerli işlem tanımlayıcısını kullanmak, günlüğü otomatik olarak kaldırmak ve hata kırmızı hatası eklemek için biraz ince ayar yaptığım @Belmin'in cevabına dayalı olarak aşağıdaki şablonu oluşturdum. bir şeyler ters gittiğinde mesaj. Bu şablonda ilk silent
sarmalayıcılar başarılı olur, ardından dizin zaten var olduğundan üçüncü komutu başarısız olur:
#!/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
:$* >>"${SILENT_LOG}" 2>&1" || report_and_exit