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”后面的数字是进程的退出状态。由 shell 报告的进程的退出状态通常为 1:

  • 0 如果程序正常退出并报告成功。
  • 如果程序正常退出并报告错误,则为 1 到 125。
  • 128+s如果程序被杀死信号 s, 在哪里s是一个小整数。

141 表示信号 13,即信号管道。在底层,git 命令在两个子命令之间设置一个管道:一个子命令收集数据并将数据写入管道,另一个子命令是寻呼机 less。如果您没有查看整个输出,则寻呼机将退出而不等待第一个子命令退出。当第一个子命令接下来尝试写入管道时,它会被 SIGPIPE 终止。这是正常行为,以避免命令继续计算和写入没有任何内容正在读取的输出。

没有什么可以修复的。但如果您发现这分散了您的注意力,您可以更改您的主题,使其在 SIGPIPE 时不报告失败状态。执行此操作的方法取决于您的 oh-my-zsh 主题,但从我快速查看可以看到(我不使用 oh-my-zsh),那些带有 FAIL 一词的主题通过设置PROMPT变量,使用条件提示扩展如果命令的退出状态非零,则仅打印 FAIL 内容。因此,如果退出状态为 141,您需要更改它以采用“无失败”分支。如果您使用与 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此处的细节与主题无关。

相关内容