"ssh localhost nohup echo hello"가 작동하지 않는 이유는 무엇입니까?

"ssh localhost nohup echo hello"가 작동하지 않는 이유는 무엇입니까?

나는 이것이 그것을 요약한다고 생각합니다 :

# /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 스크립트는 sshtty가 아닌 명령이 파이프되고 있는지 알 수 없습니다.

터미널을 감지/연결할 때만 작업을 수행하고 nohup(출력이 파이프로 들어갈 때는 아무 작업도 수행하지 않음) 시작되는 방식이 파이프되는 것처럼 보이므로 표시되는 동작을 얻을 수 있습니다.stdoutstderrssh


~처럼무루 지적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 foostdout은 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.

또한보십시오:

관련 정보