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
다음을 의미합니다.
- 하위 프로세스를 만듭니다.
/tmp/foo
하위 프로세스의 파일 설명자 3에 쓰기 위해 엽니다 ./bin/somecommand
하위 프로세스에서 파일을 실행합니다 .
exec 3>/tmp/foo
3단계만 수행하며 프로세스에 대해서는 아무 작업도 수행하지 않습니다.
이후에는 다른 리디렉션과 마찬가지로 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