stderrを端末に送信しながらnohupを使用する方法

stderrを端末に送信しながらnohupを使用する方法

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に接続されないため、出力はそこに表示されません。nohupnohup.outというファイルを生成します。ただし、tail -fすべての端末でこのファイルにアクセスしてコマンド出力を維持できます。

関連情報