쉘이 외부 명령/프로그램을 실행할 때 - 프로그램에 파일 설명자가 있습니까?

쉘이 외부 명령/프로그램을 실행할 때 - 프로그램에 파일 설명자가 있습니까?

쉘의 파일 설명자와 리디렉션 등을 위해 해당 파일 설명자를 조작하는 방법에 대한 많은 문서와 토론이 있습니다.
내 질문은 셸 명령이 , 등과 같은 외부 프로그램인 경우 rsync이러한 cat명령 curl이 셸과 동일한 파일 설명자를 갖고 있습니까?
구체적인 예를 들자면 터미널 프롬프트에서 이 명령을 실행하면

% cat << EOF | php
<?php
echo "hello". PHP_EOL;
echo "another line" . PHP_EOL;
EOF

나는 이 heredoc의 내용이 STDIN에 입력된다고 가정합니다. 그러나 어떤 프로세스입니까? 또는 cat파일 설명자가 있고 0heredoc의 내용이 catfd0?

답변1

가장 먼저 말해야 할 것은 파일 기반이든 대화형이든 다른 방법이든 모든 I/O에는 고유한 파일 설명자가 필요하다는 것입니다.

대화형 파일 설명자의 표준화를 통해 리디렉션 및 파이프가 가능합니다.

쉘은 표준 I/O 작업의 전문가입니다.

귀하의 예에서는 catHEREDOC 스크립트의 셸 출력을 나타내기 위해 STDIN이 설정된 상태로 스크립트가 호출되고( 전송을 통해 ) 해당 STDOUT이 STDIN popen()으로 파이프됩니다(popen() 사용) . 출력은 리디렉션되지 않으며 셸의 초기 STDOUT을 가리킵니다.phpphp

관련 정보