exec의 `exec FD>` 형식

exec의 `exec FD>` 형식

zsh다음(예를 들어)이 수행하는 작업을 정확하게 설명하는 매뉴얼 페이지 에서 아무것도 찾을 수 없습니다.

exec 3> /tmp/foo

내가 찾을 수 있는 모든 적절한 문서는 "간단한 명령"이 뒤에 오는 exec형식을 참조합니다 . exec(예를 들어 참조man zshbuiltins, 그리고man zshmisc.) ( exec FD>양식은 다음에서 간략하게 언급됩니다.man zshmisc, 그러나 내가 보기에 이 형식은 다른 곳에서 완전하고 적절하게 문서화되어 있다고 가정합니다.)

의 히트곡을 모두 살펴보았는데요

man zshall | grep -P '\bexec\b'

...하지만 내가 찾던 것은 없었습니다.

누락된 문서에 대한 좋은 대체품을 아는 사람이 있습니까?


추신: "문서 누락"처럼 보이는 것에 대한 가능한 설명은 다음과 같은 형식이 exec 3> /tmp/foo실제로는 "exec 간단한 명령". 그러나 그렇다면 (1) 3> /tmp/foo간단한 명령이 어떻게 사용되는지 설명하는 문서를 찾고 싶습니다. (명령줄에서 이 "간단한 명령"을 실행하면 를 칠 때까지 멈춥니다 ^C.) ; 그리고 (2) 스크립트의 코드가 exec 3> /tmp/foo평가된 후에 발생하는 반면, 그 이후에 발생하는 코드는 exec date그렇지 않은 이유입니다.

답변1

exec명령이 있는 것과 없는 것의 의미 는 관련이 없습니다. 한 가지 의미는 명령을 사용하면 의미가 없고 다른 의미는 명령 없이는 의미가 없기 때문에 내장 이름이 오버로드된 것 같습니다. 따라서 이렇게 하면 다른 이름에 사용할 수 없는 새 이름을 만드는 수고가 절약됩니다. 명령.

그만큼수동상태:

만약에명령생략되었지만 리디렉션이 지정된 경우 리디렉션이 현재 셸에 적용됩니다.

이것이 의미하는 바는 exec 3> /tmp/foo실행 중인 쉘 프로세스에서 파일 설명자 3이 가리키는 것을 변경하는 것과 같은 것입니다. 다음 과 같은 쉘 조각은 /bin/somecommand 3>/tmp/foo다음을 의미합니다.

  1. 하위 프로세스를 만듭니다.
  2. /tmp/foo하위 프로세스의 파일 설명자 3에 쓰기 위해 엽니다 .
  3. /bin/somecommand하위 프로세스에서 파일을 실행합니다 .

exec 3>/tmp/foo3단계만 수행하며 프로세스에 대해서는 아무 작업도 수행하지 않습니다.

이후에는 다른 리디렉션과 마찬가지로 exec 3>/tmp/foo셸 및 해당 하위 프로세스에서 파일 설명자 3에 대한 모든 후속 액세스가 로 이동합니다 . /tmp/foo예를 들어 파일 설명자 3에 아무것도 연결되지 않은 터미널에서 다음 스크립트를 실행한다고 가정합니다.

echo hello           # prints to the terminal
echo nope >&3        # complains about a bad descriptor since no file is open on fd 3
exec >/tmp/out 3>/tmp/three
echo hello           # writes to /tmp/out
echo howdy >&3       # writes to /tmp/three
echo wibble >&3      # writes a second line to /tmp/three

관련 정보