通常、シェルコマンドの出力を非表示にするには、 stderrとstdoutをリダイレクトする必要があります。デフォルトで出力を非表示にするが、エラー時にすべての累積出力をダンプする組み込み機能またはコマンドはありますか?これをリモートssh
コマンドのラッパーとして実行したいと思います。今、私はそれらをリダイレクトを使用していますが、何が失敗したのかについての手がかりが得られず、それらは非常に冗長です。
編集:最後に、スクリプトから以前のすべてのコマンドを蓄積し、現在のプロセス識別子を使用し、ログを自動的に削除し、失敗の赤いエラーを追加するために少し調整した@Belminの答えに基づいて次のテンプレートを作成しました何かがうまくいかないときのメッセージ。このテンプレートでは、最初のsilent
ラッパーは成功し、ディレクトリがすでに存在するため、3番目のコマンドは失敗します。
#!/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