터미널의 각 명령 다음에 종료 상태 코드를 인쇄합니다.

터미널의 각 명령 다음에 종료 상태 코드를 인쇄합니다.

zsh 종료 코드 값에 실행된 각 명령을 인쇄하고 싶습니다. 예를 들어

$ cat file_not_present
cat: file_not_present: No such file or directory
Exit code 1

터미널에서 시작된 마지막 명령의 오류 코드를 인쇄할 수 있다는 것만 알고 있습니다.

$ echo $?

어떡해?

답변1

개인적으로 는 이전 명령의 종료 상태가 실패한 경우 괄호 안에 굵게 표시되도록 %(?..%B(%?%)%b)my를 추가했는데, 이는 각 명령의 종료 상태를 인쇄하는 것보다 덜 방해적입니다.$PROMPT

각각의 종료 상태를 인쇄하십시오.실패하다명령을 사용하면 다음과 같이 할 수 있습니다.

TRAPERR() print -u2 Exit status: $?
$false; (123번 출구)
종료 상태: 1
종료 상태: 1
종료 상태: 123
(123)$ 

( 위에서 언급한 존재 (123)$에서 ).$PROMPT

각 명령에 대해 다음을 수행합니다.

TRAPDEBUG() print -u2 Exit status: $?

그러나 이것은 매우 짜증스러울 수 있습니다.

마지막 명령 실행의 종료 상태를 인쇄할 수도 있습니다.

print_last_status() print -u2 Exit status: $?
precmd_functions+=(print_last_status)
$ false; (exit 123); true
Exit status: 0

이 방법과 마찬가지로 $PROMPT이전 프롬프트에서 전송된 명령줄에서는 마지막 명령 실행 상태만 볼 수 있습니다.

어쨌든 stderr에서 인쇄하는 것은(위에서 를 사용하여 수행한 것처럼 -u2) stdout에서 인쇄하는 것보다 문제를 덜 일으킬 것입니다. 더 나은 결과를 얻을 수 있습니다 print Exit status: $? > /dev/tty.

답변2

다음 항목에 사용자 정의 함수를 추가할 수 있습니다 precmd_functions.

print_status() echo $?
precmd_functions+=(print_status)

모든 프롬프트 이전, 즉 명령 이후에 실행됩니다.

답변3

zsh에서는 precmd후크를 사용하여 다음과 같은 작업을 수행할 수 있습니다.이 답변):

% PROMPT_COMMAND='printf "Exit code: %s\n" $?'
% precmd() { eval "$PROMPT_COMMAND" }
% cat file_not_present
cat: file_not_present: No such file or directory
Exit code: 1               

Bash에서는 다음 변수를 사용할 수 있습니다 PROMPT_COMMAND.

$ PROMPT_COMMAND='printf "Exit code: %s\n" $?'
$ cat file_not_present
cat: file_not_present: No such file or directory
Exit code: 1

관련 정보