シェルスクリプトでは、次の行を取得しました。
rm tempfl.txt
rm tempfl2.txt
これらが存在しない場合、エラーメッセージが表示されます。
rm: tempfl2.txt: No such file or directory
rm: tempfl.txt: No such file or directory
ファイルが存在する可能性があるため、常に表示されるとは限らないにもかかわらず、これらのメッセージのみを抑制する方法はありますか?
次の2つのオプションがあります。
rm
警告を抑制する
$ rm tempfl.txt 2> /dev/null
スクリプト出力を/dev/null
にリダイレクトする
$ ./myscript.sh 2> /dev/null
後者には、スクリプトによって生成される他のすべての警告メッセージが表示されないという欠点があります。
他の回答の状態として、command 2> /dev/null
を使用してcommand
からのエラー出力を破棄できます。
しかし、ここで何が起こっているのでしょうか?
>
は、出力のリダイレクトに使用される演算子です。 2
は標準エラー出力ストリームへの参照です。つまり、2>
=エラー出力をリダイレクトします。
/dev/null
は 'nullデバイス'で、提供された入力をすべて飲み込みます。この2つを組み合わせて、コマンドからの出力を効果的に破棄できます。
完全なリファレンス:
> /dev/null
捨てるstdout1> /dev/null
捨てるstdout2> /dev/null
捨てるstderr&> /dev/null
stdoutandstderrの両方を捨てますこのコマンドを試してください:
rm -f tempfl.txt
-fオプションは次のように機能します。
-f, --force ignore nonexistent files, never Prompt
また、ファイルが存在しない場合、コマンドはゼロ以外のエラーコードを報告しません。
すべてのエラーメッセージを/ dev/nullにリダイレクトする必要があります
rm tempfl2.txt 2> /dev/null
上記の回答に追加:エラーメッセージ(アクセス許可の拒否など)を保持することをお勧めします。削除する前にファイルの存在をテストするだけです。
[ -f file.txt ] && rm file.txt
これは、BashのようなシェルのようなBourneを想定しています。上記には、rm
ができないようなディレクトリを削除しようとしないという追加の利点があります。
2> /dev/null
を使用して出力エラーを抑制し、|| true
を使用して正常終了ステータスを確認できます。
rm foo
=> rm: cannot remove ‘foo’: No such file or directory
rm foo 2> /dev/null
echo $?
=> 1
rm foo 2> /dev/null || true
echo $?
=> 0
シェルスクリプト、メイクファイルなどでコマンドを使用している場合は、おそらくこれが必要です。