私のOh-my-zshは次のことを行います。
コマンドを実行すると、
git log --pretty --oneline
予想どおり長いコミットのリストが表示されます。をクリックするとq突然消え、次の出力が表示されます。
$ git log --pretty --oneline FAIL: 141
なぜこれが起こるのですか?どうすれば解決できますか?
ベストアンサー1
「FAIL」の後の数字はプロセスの終了状態です。シェルによって報告されるプロセスの終了状態は通常1です。
- プログラムが正常に終了し、成功を報告する場合は0です。
- プログラムが正常に終了し、エラーが報告された場合は1〜125です。
- 128+Sプログラムが終了した場合シグナル S、どこS小さな整数です。
141は信号13を示す。信号パイプライン。内部的には、gitコマンドは2つのサブコマンドの間にパイプを設定します。 1つはデータを収集してパイプに書き込むことで、もう1つは携帯用小型無線ポケットベル 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) '
(複数行にわたっていることに注意してください。)一般的なパターンは、成功(ゼロと同じ)と失敗(信号を含む)で印刷することです。したがって、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?, ,
2行目には、前の行にさらに一致する閉じ括弧があります。)
1本内容は該当トピックとは無関係です。