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