다음 프롬프트에서 zsh 파이프라인 상태가 사라집니다.

다음 프롬프트에서 zsh 파이프라인 상태가 사라집니다.

저는 zsh 5.8(arm-apple-darwin20.2.0)을 사용하고 있습니다. PIPESTATUS다음 쉘 프롬프트에서 zsh의 파이프를 읽을 수 있는 bash의 방식과 달리 pipestatuszsh의 파이프는 다음 프롬프트에서 사라지는 것처럼 보입니다.

❯ true | false | true ; echo $pipestatus
0 1 0

❯ true | false | true
❯ echo $pipestatus
0

이 동작은 답변에서 제안한 동작과 다릅니다.여기, zsh 문서에는 이와 관련된 내용이 언급되어 있지 않습니다.

답변1

~처럼무루pipestatus뭔가가 파이프를 사용하고 있으므로 프롬프트 관련 자동화에서 재정의될 수 있다는 의견을 썼습니다 . 범인일 가능성이 가장 높은 사람은후크 기능예를 들어 precmd1 preexec.

Bash 저장 $?PIPESTATUS트랩 주변의 기타 여러 가지 항목 및 PROMPT_COMMAND(save_parser_state). $?많은 경우 Zsh (원천, 저장할 위치 찾기 lastval), 확장 힌트 포함(promptexpandprecmd) 및 다음 과 같은 후크를 실행합니다 preexec(callhookfunc수신 전화doshfunc)을 사용 noreturnval=1하지만 결코 저장하지 않습니다 pipestatus.

¹ 다음과 같은 경우 프롬프트의 코드로 변수를 설정할 수도 있습니다.prompt_subst설정되어 있지만 하위 쉘에 파이프가 있으며 원래 쉘의 pipestatus.

관련 정보