メイクファイルで次のようなことを行います。
if (mycommand) &> mycommand.log; then
echo success
else
c=$?;
echo;echo -e "Bad result from previous command, see mycommand.log for more details";echo;
command_to_run_on_fail
(exit $c)
fi
それをあなたの状況に合わせて、次のようなことができます:
if ! (mycommand) &> mycommand.log; then
c=$?;
cat mycommand.log
rm mycommand.log
(exit $c)
fi
したがって、「if」はコマンドを実行し、出力をmycommand.logにパイプします。stdout vs stdout vs anythingをキャッチする必要がある場合は、パイプコマンド「&>」を「>」に変更する必要があります。コマンドが失敗した場合は、エラーコードをキャプチャし、mycommand.logの内容を出力し、mycommand.logを削除して、最後に元のエラーコードを返します。
(exit $ c)がなければ、「rm」コマンドが返したものと一致する終了コードで戻ります。
最後に、1つのライナーが必要な場合は、このようなものが機能します。
mycommand &> mycommand.log || cat mycommand.log; rm mycommand.log