나는 이 메시지를 "잃어버린" 것 같습니다. 뭐가 문제 야?

나는 이 메시지를 "잃어버린" 것 같습니다. 뭐가 문제 야?

SSH를 통해 우분투 12.04 클라우드 서버에 연결하고 다음과 같이 웹 서버를 시작했습니다(bash 사용).

$ nohup python tserver.py &
[2] 2122
$ nohup: ignoring input and appending output to `nohup.out'

명령을 실행하면 프롬프트가 사라집니다. 빈 줄이 하나뿐입니다. "Enter"를 눌러 프롬프트를 복원할 수 있습니다. 즉, Enter를 누른 후에 $가 다시 표시됩니다. 하지만 이러한 명령 중 일부를 스크립트로 작성하고 싶습니다(여러 웹 서버 인스턴스 열기). 그래서 "입력 명령 보내기"와 같은 스크립트를 작성하고 싶지 않습니다. 여기서 무슨 일이 일어나고 있는 걸까요? 팁이 누락된 이유는 무엇인가요? 이러한 일련의 명령을 어떻게 스크립트로 작성할 수 있습니까?

답변1

애플리케이션을 백그라운드에 두고 애플리케이션이 출력을 생성하는 중입니다. 귀하의 메시지는 여전히 존재하며 단지 추가 콘텐츠가 표시될 뿐입니다.

예를 들어:

$ ( sleep 1 && echo hello ) &
[1] 24764
$ █

그런 다음 1초 지연 후 다음을 얻습니다.

$ ( sleep 1 && echo hello ) &
[1] 24764
$ hello

출력은 단순히 echo터미널에 기록되고 현재 커서가 있는 위치에 나타납니다. 쉘은 출력이 표시되었음을 알지 못합니다. 출력이 존재하지 않는 것처럼 계속 입력할 수 있습니다(단지 읽기가 더 어려워집니다).

그러나 깨끗한 해결책은 출력을 리디렉션하는 것입니다.

nohup python tserver.py >/dev/null 2>&1 &

답변2

명령문을 통해 백그라운드에서 프로그램을 시작했지만 &백그라운드 프로세스의 출력은 여전히 ​​현재 터미널의 표준 출력으로 지정됩니다.

이는 프롬프트가 echo '\r\n'(다음 프롬프트가 완전히 사라질 경우 현재 줄 덮어쓰기) 또는 echo "Someotherstuff"( Someotherstuff프롬프트 앞에 인쇄한 후 터미널의 다음 줄로 이동)과 같은 것으로 덮어쓰여지고 있음을 의미합니다.

를 누르면 ENTER줄 바꿈 문자만 입력하게 되며 이로 인해 프롬프트가 다시 인쇄됩니다.

관련 정보