コマンド呼び出しが成功した場合にのみ出力リダイレクト

コマンド呼び出しが成功した場合にのみ出力リダイレクト

diffコマンドの出力(この場合)をファイルにリダイレクトしたいが、比較するファイルに違いがある場合にのみ可能です。たとえば、、、、a3bつのファイルがあるとします。cここで、abは同じですが、aそうcではありません。

diff a c > output.txtこれにより、diff a b > output.txt違いがあるかどうかにかかわらずoutput.txt生成されます。output.txt違いがある場合にのみ生成したいです(たとえば、差が1を返します)。

私は似たようなことをしたい:

if ! diff a c > /dev/null; then
    diff a c > output.txt
fi

ただし、コマンドを2回実行する必要はありません。私できる次のようにコマンドの内容を保存します。

res=$(diff a c)
if [ $? != 0 ]; then
    echo "$res" > output.txt
fi

しかし、私はecho「仲介者」として介入し、いくつかの問題を引き起こす可能性があります。コードを複製せずに出力がある場合にのみ、出力をリダイレクト/ファイル生成する方法は?

ベストアンサー1

コマンドを一度呼び出して出力をリダイレクトし、違いを作成せずに出力を削除できます。

diff a c > output.txt && rm output.txt

おすすめ記事