nohupは自動的にstderrをstdoutにリダイレクトしますが、それを端末(進行状況が表示される場所)に送信したいと思います。どうすればいいですか?
答え1
方向を変えてください。たとえば、stderrに1行、stdoutに1行を印刷する次のスクリプトを使用します。
#!/bin/sh
echo stderr >&2
echo stdout
今実行してnohup
標準エラーをファイルにリダイレクトすると、期待どおりに動作します。
$ nohup a.sh 2>er
$ cat er
nohup: ignoring input and appending output to ‘nohup.out’
stderr
nohup
をリダイレクトしているので、標準エラー自体も含まれていますnohup
。標準出力でも同じことができます。
nohup a.sh > foo
デフォルトでは、出力をリダイレクトしない場合にのみnohup
使用されます。nohup.out
標準エラーを端末に印刷するには、次を使用できます。プロセスリダイレクトstderrを介して渡されましたtee
:
$ nohup a.sh 2> >(tee)
nohup: ignoring input and appending output to ‘nohup.out’
stderr
答え2
nohup
マニュアルによると:
NAME
nohup - run a command immune to hangups, with output to a non-tty
関連付けられたttyを持たないコマンドを実行するために使用されます。セッションを終了してもコマンドは実行を続けるため、その出力はttyに接続されないため、出力はそこに表示されません。nohup
nohup.outというファイルを生成します。ただし、tail -f
すべての端末でこのファイルにアクセスしてコマンド出力を維持できます。