パラメータを使ってプログラムを実行するbashスクリプトがあります。そのプログラムは何らかのステータスを出力します(これを実行している、実行している...)。このプログラムを静かにするオプションはありません。スクリプトが何も表示しないようにするにはどうすればよいですか。
私は窓のようなものを探しています。
以下は、標準出力を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
これは標準出力andエラー出力を防ぎ、両方を/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 postのようにこれを使用してください:(あなたがUnix環境で働いているなら)
scriptname > /dev/null
または、これを使用することもできます。(Windows環境で作業している場合)
scriptname > nul
この例をThe Linux Documentation Projectから見てください。
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