파이프라인의 명령 종료 상태

파이프라인의 명령 종료 상태

이 코드를 발견했지만 이해할 수 없었습니다.exec >&p

내 이해를 바탕으로 1을 편집하십시오.

#! /usr/bin/ksh
exec 4>&1               ## standard output is first saved as file descriptor 4
tail -5 >&4 |&          ## spawn it as co process
exec >&p                ## output of co-process is moved to standard output
cat /etc/passwd         ## this can be any command like ps aux
exitcode=$?
exec >&- >&4            ## standard output is closed using >&-
wait
echo exitcode = $exitcode
exit 0

답변1

>&p셸의 특수 리디렉션은 ksh93표준 출력 스트림을 현재 코프로세스로 실행 중인 명령의 표준 입력으로 리디렉션합니다.

주어진 예에서 tail -5명령은 를 사용하여 보조 프로세스로 시작되고 |&스크립트 exec >&p는 모든 출력을 해당 프로세스로 리디렉션하는 데 사용됩니다( tail예제에서는 출력만).cat

원본 표준 출력은 먼저 파일 설명자 4에 저장되고 exec 4>&1(파일 설명자 4에도 기록됨 tail) exec >&4최종 echo.

모든 파일 설명자를 저글링하지 않고 동일한 내용을 작성하는 또 다른 방법은 다음과 같습니다.

tail -n 5 /etc/passwd
printf 'exitcode = %d\n' "$?"

( 이것은 대신 $exitcode의 종료 상태가 되지만 )tailcat

관련 정보