web-dev-qa-db-ja.com

Bashを使ってコマンドからのすべての出力を抑制する方法は?

パラメータを使ってプログラムを実行するbashスクリプトがあります。そのプログラムは何らかのステータスを出力します(これを実行している、実行している...)。このプログラムを静かにするオプションはありません。スクリプトが何も表示しないようにするにはどうすればよいですか。

私は窓のようなものを探しています。

264
6bytes

以下は、標準出力を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
467
andynormancx

何かのようなもの

script > /dev/null 2>&1

これは標準出力andエラー出力を防ぎ、両方を/dev/nullにリダイレクトします。

41
Diego Sevilla

やってみる

: $(yourcommand)

:は "何もしない"の略です。

$()はあなたのコマンドです。

11
V0idSt4r

状況によっては、コマンドの結果を変数に代入する方法もあります。

$ 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
7
semente

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
4
ivanleoncz

あなたのスクリプトでは、あなたが出力を与えるつもりであることがわかっている行に以下を追加することができます:

some_code 2>>/dev/null

または他にも試すことができます

some_code >>/dev/null
1
Rohan Dsouza