Bashを使用してコマンドからのすべての出力を抑制する方法は?
質問
パラメーターを使用してプログラムを実行するbashスクリプトがあります。そのプログラムは何らかのステータスを出力します(これを行う、それを行う...)。このプログラムを静かにするオプションはありません。スクリプトが何も表示しないようにするにはどうすればよいですか?
ウィンドウのようなものを探しています" echo off"。
解決
次の例では、nullデバイス(ビットバケット)に標準出力が送信されます。
scriptname >/dev/null
また、エラーメッセージも送信する場合は、次のいずれかを使用します(最初のシェルはすべてのシェルで機能しない場合があります):
scriptname &>/dev/null
scriptname >/dev/null 2>&1
scriptname >/dev/null 2>/dev/null
そして、メッセージを記録したいが見たくない場合は、 / dev / null
を次のような実際のファイルに置き換えます。
scriptname &>scriptname.out
完全を期すために、Windows cmd.exe(" nul"は" / dev / null"と同等です)では、:
scriptname >nul 2>nul
他のヒント
次のようなもの
script > /dev/null 2>&1
これにより、標準出力のおよびエラー出力が防止され、両方が / dev / null
にリダイレクトされます。
試用
: $(yourcommand)
:
は、「何もしない」の略です。
$()
は単なるコマンドです。
状況によっては、コマンドの結果を変数に割り当てることもできます:
$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1
Bashおよび他のPOSIXコマンドラインインタープリターは変数の割り当てをコマンドと見なさないため、現在のコマンドのリターンコードが考慮されます。
注: typeset
または declare
キーワードを使用した割り当てはコマンドと見なされるため、評価された戻りコードは割り当て自体ですサブシェルで実行されるコマンドではなく:
$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
andynormancxの投稿のようにこれを使用します:(Unix環境で作業している場合)
scriptname > /dev/null
またはこれを使用できます:(Windows環境で作業している場合)
scriptname > nul
Linuxドキュメントのこの例をご覧くださいプロジェクト :
3.6サンプル:stderrおよびstdout 2ファイル
これにより、プログラムのすべての出力がファイルに配置されます。コマンドを完全に無音で渡す場合、これはcronエントリに適している場合があります。
rm -f $(find / -name core) &> /dev/null
とはいえ、この単純なリダイレクトを使用できます:
/path/to/command &>/dev/null
スクリプトでは、出力を行うことがわかっている行に次を追加できます。
some_code 2>>/dev/null
または、他にも試すことができます
some_code >>/dev/null