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

StackOverflow https://stackoverflow.com/questions/617182

  •  03-07-2019
  •  | 
  •  

質問

パラメーターを使用してプログラムを実行する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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top