이 코드를 발견했지만 이해할 수 없었습니다.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
의 종료 상태가 되지만 )tail
cat