쉘의 파일 설명자와 리디렉션 등을 위해 해당 파일 설명자를 조작하는 방법에 대한 많은 문서와 토론이 있습니다.
내 질문은 셸 명령이 , 등과 같은 외부 프로그램인 경우 rsync
이러한 cat
명령 curl
이 셸과 동일한 파일 설명자를 갖고 있습니까?
구체적인 예를 들자면 터미널 프롬프트에서 이 명령을 실행하면
% cat << EOF | php
<?php
echo "hello". PHP_EOL;
echo "another line" . PHP_EOL;
EOF
나는 이 heredoc의 내용이 STDIN에 입력된다고 가정합니다. 그러나 어떤 프로세스입니까? 또는 cat
파일 설명자가 있고 0
heredoc의 내용이 cat
의 fd0
?
답변1
가장 먼저 말해야 할 것은 파일 기반이든 대화형이든 다른 방법이든 모든 I/O에는 고유한 파일 설명자가 필요하다는 것입니다.
대화형 파일 설명자의 표준화를 통해 리디렉션 및 파이프가 가능합니다.
쉘은 표준 I/O 작업의 전문가입니다.
귀하의 예에서는 cat
HEREDOC 스크립트의 셸 출력을 나타내기 위해 STDIN이 설정된 상태로 스크립트가 호출되고( 전송을 통해 ) 해당 STDOUT이 STDIN popen()
으로 파이프됩니다(popen() 사용) . 출력은 리디렉션되지 않으며 셸의 초기 STDOUT을 가리킵니다.php
php