sleep 100&
スクリプトの場合は、コマンドの後にシェルに表示される「[1] 00000」メッセージをリダイレクトしたいと思います。もう必要ありませんが、この問題を解決している間、Bash自体の出力はどこに行くのか考え始めました。なぜbash > test
、bash &> 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:
$