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