Bash自体の出力はどこに行きますか?

Bash自体の出力はどこに行きますか?

sleep 100&スクリプトの場合は、コマンドの後にシェルに表示される「[1] 00000」メッセージをリダイレクトしたいと思います。もう必要ありませんが、この問題を解決している間、Bash自体の出力はどこに行くのか考え始めました。なぜbash > testbash &> testそれともbash | [some program]機能しませんか?ファイル記述子1と2は、単に端末に書き込まれるファイル記述子ですか?それでは、bashや他のプログラムがユーザーに印刷したい場合、どのように標準出力をバイパスしますか?

ベストアンサー1

メッセージはstderrに送信されましたが、バッシュコマンドのstderrではなくstderrなので、コマンドの出力とエラーをリダイレクトしても影響はありません。

これを説明するために、コマンドグループのstderrをリダイレクトしてメッセージをリダイレクトできます。

$ { sleep 100& } 2>test
$ more test
[1] 94358
$ 
$ 
$ # Then, 100 seconds later:
[1]+  Done                    sleep 100
$ 

「完了」などのステータスメッセージが望ましくない場合(そしてそのメッセージが一般的に表示される状況にある場合)、disownバックグラウンドタスクを実行できます。

$ { sleep 10& disown $!; } 2>test
$ more test
[1] 94400
$ 
$ # After 10 seconds:
$ 

おすすめ記事