"nohup.out"にnohupを追加することと明示的にファイルにリダイレクトすることの違いは何ですか?

"nohup.out"にnohupを追加することと明示的にファイルにリダイレクトすることの違いは何ですか?

次のシナリオを考えてみましょう。

テールファイル:

#!/bin/bash
tail -f test.txt

call.sh:

#!/bin/bash
nohup ./tail.sh &

call_explicitredirect.sh:

#!/bin/bash
nohup ./tail.sh > out.log &

端末で両方を実行すると、同じ効果が表示されます。

  • 実行後、端末制御権を取り戻しました。./tail.sh
  • tail端末に出力が表示されません。

sshただし、(たとえば)次のように実行する場合ssh <user>@<hostname> "<script>"

  • invoke_explicitredirect.shコントロールを次に返すssh(および終了)
  • invoke.sh送るまで止まるSIGINT

man nohup可能であれば、nohup出力は自動的に「nohup.out」にリダイレクトされます。

If standard output is a terminal, append output to 'nohup.out' if possible, '$HOME/nohup.out' otherwise.

nohup出力に追加できるようにすることと、nohup.out出力を明示的にリダイレクトすることの違いは何ですか?

答え1

SSH経由でリモートでコマンドを実行すると、標準出力は端末ではありません。両方のコマンドで同じ動作を得るには、-twithオプションを使用します。ssh

sshとnohupの詳細:http://snailbook.com/faq/Background-jobs.auto.html(wikiページから取得:https://en.wikipedia.org/wiki/Nohup)

関連情報