현재 쉘에 변수가 설정된 경우 명령을 읽는 방법은 무엇입니까 ${PIPESTATUS[0]
? 어떻게든 이것을 현재 쉘에 전달할 수 있는 방법이 있습니까?
변수를 설정 중인데 메일 속성이 실제로 LDAP에 존재하지 않는다고 결정하기 전에 변수가 실패하지 않는지 확인 MAIL=$(ldapsearch.... | find_for_mail)
하고 싶습니다 .ldapsearch
$ true | false
$ echo ${PIPESTATUS[0]} ${PIPESTATUS[1]}
0 1
$ Z=$(true | false)
$ echo ${PIPESTATUS[0]}
1 <--- why 1?
$ echo ${PIPESTATUS[1]}
$ Z=$(true | false;echo ${PIPESTATUS[0]} ${PIPESTATUS[1]})
$ echo $Z
0 1
$ Z=$(true | false;C="${PIPESTATUS[0]} ${PIPESTATUS[1]}")
$ echo $C
$ Z=$(true | false;export C="${PIPESTATUS[0]} ${PIPESTATUS[1]}")
$ echo $C
답변1
문제는 export
변수를 상위 프로세스에서 하위 프로세스로 환경 변수로 내보내는 것이지 그 반대는 아닙니다. 종료 코드 중 하나만 관심이 있는 경우 다음 코드를 사용할 수 있습니다.
$ Z=$(false | true; exit ${PIPESTATUS[0]})
$ echo $?
1
답변2
Linux에서 이를 수행하는 한 가지 방법은 임시 파일을 사용하여 데이터를 전달하는 것입니다( <<<
임시 파일을 사용함).
{
output=$(cmd1 | cmd2 | cmd3; printf '%s\n' "${PIPESTATUS[@]}" > /dev/fd/3)
readarray -t cmdsubst_pipe_status <&3
} 3<<< ''
printf '%s\n' "cmd1's status: ${cmdsubst_pipe_status[0]}"