nohup 명령을 사용한 표준 입력 입력

nohup 명령을 사용한 표준 입력 입력

~에서http://www.gnu.org/software/coreutils/manual/html_node/nohup-inplication.html

nohup은 지정된 명령을 실행하고 로그아웃 후에도 명령이 백그라운드에서 계속 실행될 수 있도록 끊기 신호를 무시합니다.

요약:nohup command [arg]...

표준 입력이 터미널인 경우 터미널 세션에서 명령이 해당 터미널을 사용하기 위한 것이라고 잘못 생각하지 않도록 리디렉션하십시오.

  1. 우리가 이것을 해야 하는 이유:

    실수로 표준 입력에서 읽으려고 시도하는 명령이 오류를 보고할 수 있도록 대체 파일 설명자를 읽을 수 없도록 만듭니다.

  2. 파일의 표준 입력을 리디렉션하지 않습니까 nohup command [arg]... 0<myfile? 왜 0>/dev/null?

    이 리디렉션은 GNU 확장입니다. 비 GNU 호스트에 이식 가능하도록 설계된 프로그램을 사용할 수 있습니다 nohup command [arg]... 0>/dev/null.

답변1

nohup을 사용하여 복잡한 스크립트를 실행하려고 한다고 상상해 보세요. stdin을 읽을 수 없는 파일 설명자로 리디렉션하여 stdin을 읽으려고 하는지 여부를 감지할 수 있습니다. 다음 두 가지 예를 살펴보십시오. 첫 번째 0</dev/null:

rm nohup.out
nohup sh -c 'head -1' 0</dev/null
echo $?
cat nohup.out 

nohup.out 파일은 비어 있고 스크립트의 반환 코드( $?)는 0입니다. 이는 스크립트가 파일의 끝만 읽었기 때문에 괜찮습니다. 이제 0>/dev/nullie 0을 사용하여 동일한 스크립트를 열어 보십시오 .출력 전용:

rm nohup.out
nohup sh -c 'head -1' 0>/dev/null
echo $?
cat nohup.out 

nohup.out에 오류 메시지가 표시됩니다.

head: error reading 'standard input': Bad file descriptor

종료 코드는 1이며 실패했습니다. 이것이 당신에게 더 유용할 수 있습니다. 다음을 사용하여 stdin을 꺼서 동일한 효과를 얻을 수도 있습니다 0<&-.

rm nohup.out
nohup sh -c 'head -1' 0<&-
echo $?
cat nohup.out 

관련 정보