Tonin は、デフォルトのプロンプトでバグを指摘しました。最小限の例:
PS1を設定します。
PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " ")$ '
この時点で、プロンプトは次のようになります。
$
次を実行して、終了コードの出力をトリガーします。
false
これで、プロンプトの行頭に赤の終了コードが含まれます。
1 $
- Ctrl-を押しrます。
「false」と入力します。これで、プロンプトには検索のみが含まれます。
(reverse-i-search)`false': false
- を押しEnterます。
結果の端末履歴には、次が含まれます。
1 $ch)`false': false
期待される出力:
1 $ false
つまり、履歴検索の出力がプロンプトと混合され、実行された実際のコマンドが隠されているようです。
私はこれを回避するために使用してみましたPROMPT_COMMAND
:
set_exit_code() {
exit_code=$?
[[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " "
}
set_bash_prompt() {
PS1='$(set_exit_code)$ ' # Double quotes give the same result
}
PROMPT_COMMAND=set_bash_prompt
これは機能していないようです-行は検索して実行した後と以前とまったく同じに見えます。
どうすれば修正できますか?
1
これは、unix.stackexchange.com
—
a