Oh-my-zsh는 성공적인 명령의 출력 "FAIL: 141"을 삭제합니다.

Oh-my-zsh는 성공적인 명령의 출력 "FAIL: 141"을 삭제합니다.

내 Oh-my-zsh는 다음을 수행합니다.

  1. 명령 을 실행하면 git log --pretty --oneline예상대로 긴 커밋 목록이 표시됩니다.

  2. 을 클릭하면 q갑자기 사라지고 다음 출력이 표시됩니다.

    $ git log --pretty --oneline
    FAIL: 141
    

왜 이런 일이 발생합니까? 어떻게 해결할 수 있나요?

답변1

"FAIL" 뒤의 숫자는 프로세스의 종료 상태입니다. 셸에서 보고하는 프로세스의 종료 상태는 일반적으로 1입니다.

  • 프로그램이 정상적으로 종료되고 성공을 보고하는 경우 0입니다.
  • 프로그램이 정상적으로 종료되고 오류가 보고된 경우 1~125입니다.
  • 128+에스프로그램이 종료된 경우신호 에스, 어디에스작은 정수입니다.

141은 신호 13을 나타낸다.신호 파이프라인. 내부적으로 git 명령은 두 하위 명령 사이에 파이프를 설정합니다. 하나는 데이터를 수집하여 파이프에 쓰는 것이고 다른 하나는휴대용 소형 무선 호출기 less. 전체 출력을 보지 않으면 첫 번째 하위 명령이 종료될 때까지 기다리지 않고 호출기가 종료됩니다. 첫 번째 하위 명령이 다음에 파이프에 쓰려고 시도하면 SIGPIPE에 의해 종료됩니다. 이는 명령이 아무것도 읽지 않고 출력을 계속 계산하고 쓰는 것을 방지하기 위한 정상적인 동작입니다.

아무것도 고칠 수 없습니다. 그러나 이것이 방해가 된다고 생각되면 SIGPIPE에 실패 상태를 보고하지 않도록 테마를 변경할 수 있습니다. 이를 수행하는 방법은 oh-my-zsh 테마에 따라 다르지만 간략히 살펴보면(저는 oh-my-zsh를 사용하지 않음) FAIL이라는 단어가 있는 사용자는 다음을 사용하여 PROMPT변수를 설정합니다.조건부 프롬프트 확장명령의 종료 상태가 0이 아니면 FAIL만 인쇄됩니다. 따라서 종료 상태가 141인 경우 "no failure" 분기를 사용하도록 변경해야 합니다. oh-my-zsh와 함께 번들로 제공되는 테마를 사용하는 경우 FAIL테마 정의에서 찾아보세요 ~/.oh-my-zsh/themes/$ZSH_THEME.zsh-theme. 예를 들어 보겠습니다 dst.zsh-theme. 정의는 다음과 같습니다.

PROMPT='%(?, ,%{$fg[red]%}FAIL%{$reset_color%}
)
%{$fg[magenta]%}%n%{$reset_color%}@%{$fg[yellow]%}%m%{$reset_color%}: %{$fg_bold[blue]%}%~%{$reset_color%}$(git_prompt_info)
$(prompt_char) '

(여러 줄에 걸쳐 있다는 점에 유의하세요.) 일반적인 패턴은 성공(0과 같음) 및 실패(신호 포함) 시 인쇄하는 것입니다. 따라서 141과 같으면 다른 조건을 추가합니다.%(?,IFSUCCESS,IFFAILURE)IFSUCCESS$?IFFAILURE$?

PROMPT='%(141?, ,%(?, ,%{$fg[red]%}FAIL%{$reset_color%}
))
%{$fg[magenta]%}%n%{$reset_color%}@%{$fg[yellow]%}%m%{$reset_color%}: %{$fg_bold[blue]%}%~%{$reset_color%}$(git_prompt_info)
$(prompt_char) '

( %(141?, ,두 번째 줄에는 이전 줄에 추가로 일치하는 닫는 괄호가 있습니다.)

1 본 내용은 해당 주제와 무관합니다.

관련 정보