nohup은 SSH 세션에서 다음 프롬프트를 표시하지 않습니다.

nohup은 SSH 세션에서 다음 프롬프트를 표시하지 않습니다.

SSH를 통해 원격 Ubuntu 시스템에 연결한다고 가정해 보겠습니다. nohup연결이 끊어질 가능성이 있는 경우 스크립트를 실행하고 해당 로그를 파일로 리디렉션하고 싶습니다 . 내가 실행한 명령은

nohup bash myscript.sh > log.txt &

그런 다음 터미널은 스크립트의 PID와 메시지를 인쇄합니다.

nohup은 입력을 무시하고 stderr를 stdout으로 리디렉션합니다.

Ctrl거기에서 커서가 멈추고 D+를 사용하여 SSH 세션을 종료하고 다시 로그인하지 않으면 다른 명령을 실행할 수 없습니다. SSH 세션을 열어두고 다시 로그인할 필요 없이 다음 터미널 프롬프트로 계속 진행하고 싶습니다. 이것을 달성할 수 있는 방법이 있나요?

답변1

예상한 대로 이 명령은 백그라운드에서 실행됩니다. 그러나 이 특별한 경우에는 경쟁 조건이 있으며 출력 메시지는 쉘 프롬프트 뒤에 부분적으로 기록됩니다.

시각적 결과는 쉘 프롬프트가 nohup메시지 앞에 있거나 메시지가 완전히 덮어쓰여지는 것입니다.

최종 결과는 쉘이 프롬프트를 작성했으므로 다음 명령을 실행할 준비가 되어 있다는 것입니다. Enter를 눌러 새 프롬프트를 생성하거나 다음 명령을 직접 입력할 수 있습니다.

답변2

이것을 .bashrc에 추가하세요

function detach { ( nohup $* </dev/null 2>&1 >/dev/null & disown ; sleep 0 ) >/dev/null ; } ; export -f detach

그런 다음 다음을 실행할 수 있습니다. 예를 들어 detach gedit .bashrc

특정 프로그램에 대한 기능을 만들 수도 있습니다. 예를 들면 다음과 같습니다.

function gedit { ( nohup gedit $* </dev/null 2>&1 >/dev/null & disown ; sleep 0 ) >/dev/null ; } ; export -f gedit

"disown"은 프로그램이 백그라운드에서 종료될 때 출력을 차단합니다.

"sleep 0"을 입력하면 프롬프트가 반환됩니다.

관련 정보