2017-10-18 5 views
1

私はbashスクリプトを書いています。それはいくつかのエコーステートメントを持っています。これは、いくつかのサードパーティのツールを呼び出します。 stdoutに行くすべてのもの(私のecho文とすべてのツールの出力から)をstderrにリダイレクトしたいと思います。それ、どうやったら出来るの?bashスクリプトの出力をstderrにリダイレクトするには

答えて

4

コマンドのstdoutをstderrにリダイレクトする必要があります。スクリプト内からこれを実行したい場合は、一つの関数の中にあなたの全体のスクリプトをラップし、標準エラー出力に出力をリダイレクトすることができ

your_command.sh 1>&2

main() { 
    echo hello 
    echo world 
    some_script.sh 
} 

main 1>&2 
+0

だから、何かのような? echo hello 1>&2また、これは(>&2 echo helloと同じです) –

+2

@PhilOはい、リダイレクション演算子は、コマンドラインを呼び出す前にシェルが識別して削除するため、コマンドラインのどこにでも(ほぼ)表示できます。あなたの例のように、単純なコマンドの名前の前に置くこともできますが、 'while'、' for'、 'if'などの複合コマンドの後に表示する必要があります。' echo 1>&2 hello'も同様に動作します。 – chepner

3
exec >&2 

でそれを入れて将来のすべての出力をstderrにリダイレクトするスクリプトの先頭。私のために働いたソリューションは、()の中にスクリプトのテキストを囲み、そのように標準エラー出力に標準出力をリダイレクトすることでした

$ help exec 
exec: exec [-cl] [-a name] [command [arguments ...]] [redirection ...] 
    Replace the shell with the given command. 

    Execute COMMAND, replacing this shell with the specified program. 
    ARGUMENTS become the arguments to COMMAND. If COMMAND is not specified, 
    any redirections take effect in the current shell. 
+0

シンプル!出力をstdoutとstderrの両方に移動させたいとしますか? –

+0

これはツールからの出力をリダイレクトしません –

+0

確かにそうです。すべてのコマンドに影響します。 –

1


( echo 1 echo 2 tool1 ) 1>&2

+0

curliesで試してみてください。 '{...}>&2' –

関連する問題