나는 이것이 그것을 요약한다고 생각합니다 :
# /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.
또한보십시오: