私はこれがそれを要約すると思います:
# /usr/bin/nohup echo hello
/usr/bin/nohup: ignoring input and appending output to `nohup.out'
# ssh localhost /usr/bin/nohup echo hello
hello
どうしたの?
答え1
確かに、
最新バージョンのSSHは、TTYではなくSTDIO用のパイプの使用を開始します。
だから
Bashスクリプトは、
ssh
tty以外のコマンドがパイプされているかどうかはわかりません。
ターミナルを検出/接続するときにのみ操作を実行しnohup
(出力がパイプに入るときは何もしません)、開始方法がパイプに見えるため、表示される動作が得られます。stdout
stderr
ssh
〜のようにムル 指摘ssh
、パラメータを使用して強制的に割り当てることができます。tty
-t
$ ssh -t localhost "/usr/bin/nohup /bin/echo foo"
/usr/bin/nohup: ignoring input and appending output to ‘nohup.out’
答え2
~からman nohup
(POSIX):
If the standard output is a terminal, all output written by the named
utility to its standard output shall be appended to the end of the file
nohup.out in the current directory. ...
If the standard error is a terminal, all output written by the named
utility to its standard error shall be redirected to the same file
descriptor as the standard output.
強調する:もし標準出力は端子です。。
Simple ssh nohup echo foo
stdout は、SSH に TTY を生成するよう指示しない限り、TTY ではありません。
ssh -t localhost nohup echo foo
~からman ssh
:
-T Disable pseudo-tty allocation.
-t Force pseudo-tty allocation. This can be used to execute
arbitrary screen-based programs on a remote machine, which can be
very useful, e.g. when implementing menu services. Multiple -t
options force tty allocation, even if ssh has no local tty.
また見なさい: