`<&-`는 무엇을 합니까?

`<&-`는 무엇을 합니까?

백그라운드에서 원격으로 ssh 명령을 실행하기 위해 Bash 섹션을 복사했습니다.

ssh user@remote <<CMD
some process <&- >log 2>error &
CMD

<&-효과 는 무엇입니까 ?
내 추측으로는 뭔가 관련이 있는 것 같아< /dev/null

다음 이해는 다음을 방지하기 위해 세 가지 주요 파일 설명자( stdin, stdout, )를 닫아야 한다는 것입니다.stderr

  1. 백그라운드에서 실행 중인 작업과 스크립트 종료 중 충돌이 발생합니까?
  2. 터미널이 닫히면 터미널에서 stdin을 수신하는 모든 프로세스가 닫히나요?

답변1

<&-아니요상당히.< /dev/null<&-fd 0을 닫습니다. < /dev/nulldevice에서 리디렉션하는 동안 /dev/null데이터를 제공하지 않으며 읽기 시 항상 EOF를 제공합니다. 주요 차이점은 read(2)닫힌 FD(이 <&-경우)의 호출은 EBADF 오류를 발생시키는 반면, 빈 리디렉션 FD의 호출은 읽은 바이트(파일 끝 조건)를 반환하지 않는다는 것입니다. 프로그램이 표준 입력에서 데이터를 읽지 않는다면 차이는 중요하지 않습니다.

백그라운드에서 무언가를 실행하려면 FD를 끄는 것이 좋습니다. 왜냐하면 백그라운드 프로세스가 TTY에서 무엇이든 읽으려고 하면 중단되기 때문입니다. 하지만 이 예제는 필요한 모든 것을 처리하지는 않지만 이상적으로는 백그라운드 프로세스를 완전히 분리하기 위해 어딘가에 nohupOR 호출이 있을 것입니다.setsid

답변2

바라보다 man bash:

  [n]<&word

입력 파일 설명자를 복사하는 데 사용됩니다. word하나 이상의 숫자로 확장 되면 표시된 파일 설명자는 n해당 파일 설명자의 복사본이 됩니다. 숫자가 word 입력을 위해 열린 파일 설명자를 지정하지 않으면 리디렉션 오류가 발생합니다. word가 로 평가되면 -파일 설명자가 n닫힙니다. 지정하지 않으면 n표준 입력(파일 설명자 0)이 사용됩니다.

답변3

<&-표준 입력을 닫습니다.

이것POSIX에서 정의한 일반 형식, 예:

[n]<&word

파일 설명자가 생성된 목적은 n파일 설명자의 복사본으로 표시됩니다 word. 생략 하면 n표준 입력으로 가정하고, 그렇다면 word파일 -설명자가 n닫힙니다.

</dev/null의 경우 </dev/null표준 입력이 여전히 열려 있고 다른 곳으로 리디렉션된다는 점 에서 다릅니다 .

SSH 소켓에 연결된 프로세스의 모든 파일 설명자를 닫아야 합니다. 그렇지 않으면 SSH 세션을 닫을 수 없습니다.

다음을 사용하여 SSH 세션에 연결하지 않고도 원격 시스템에서 명령을 실행할 수 있습니다.화면또는멀티플렉서:

ssh user@remote 'screen -S test -d -m command'

관련 정보