私はbashプロンプトで作業しています。また、読みやすく保守しやすいようにプロンプトをインテリジェントに作成しようとします。これは大きなものがないことを意味しますexport PS1
。
さまざまなソース(含まれていますこの問題)bashが長いコマンドでプロンプトを上書きしないようにするには、周辺の書式設定の必要性\[
に関する情報を参照してください。\]
文字列を生成するときに最後のコマンド()の終了ステータスを赤で表示するか、0の場合は何も表示したくありませんPROMPT_LAST_EXIT_STATUS
。これはうまくいきますが、テキストsとsがプロンプトに表示され、長いコマンドの問題が続きます。どこかに回避的な問題かもしれませんが、まだ見つかりませんでした。$?
$?
[
]
次のコードはにあります~/.bashrc
。
prompt_last_exit_status () {
PROMPT_LAST_EXIT_STATUS="${?}";
if [[ ${PROMPT_LAST_EXIT_STATUS} == "0" ]];
then
PROMPT_LAST_EXIT_STATUS=
else
PROMPT_LAST_EXIT_STATUS=\[$(tput setaf 1)$(tput bold)\]${PROMPT_LAST_EXIT_STATUS}
PROMPT_LAST_EXIT_STATUS+=\[$(tput sgr0)\]
PROMPT_LAST_EXIT_STATUS+=" "
fi;
}
prompt_command () {
prompt_last_exit_status
}
export PROMPT_COMMAND=prompt_command
PS1="\${PROMPT_LAST_EXIT_STATUS}"
PS1+="\[$(tput setaf 6)$(tput bold)\]\w"
PS1+="\[$(tput sgr0)\] \$ \[$(tput sgr0)\]"
export PS1
ベストアンサー1
あなたの割り当ては引用されていないので、文字列にandを入れずにPROMPT_LAST_EXIT_STATUS
単にandです(sはエスケープ文字と見なされるためです)。\[
\]
[
]
\
比較する:
$ foo=\[hello\]
$ echo "$foo"
[hello]
比較:
$ foo="\[hello\]"
$ echo "$foo"
\[hello\]
さらに、パラメータ拡張(プロンプト文字列に変数を挿入)は、プロンプト特殊文字拡張後に発生します。したがって、変数に\[
andを入れることは、拡張された場合はもはや特別ではないため機能しません。有効な代替方法は、色設定を無条件にすることです。たとえば、次のようになります。\]
PROMPT_LAST_EXIT_STATUS
$PROMPT_LAST_EXIT_STATUS
\[
\]
prompt_last_exit_status () {
PROMPT_LAST_EXIT_STATUS="${?}"
if [[ ${PROMPT_LAST_EXIT_STATUS} == "0" ]]
then
PROMPT_LAST_EXIT_STATUS=
else
PROMPT_LAST_EXIT_STATUS+=" "
fi
}
prompt_command () {
prompt_last_exit_status
}
export PROMPT_COMMAND=prompt_command
PS1="\[$(tput setaf 1)$(tput bold)\]\${PROMPT_LAST_EXIT_STATUS}\[$(tput sgr0)\]"
PS1+="\[$(tput setaf 6)$(tput bold)\]\w"
PS1+="\[$(tput sgr0)\] \$ \[$(tput sgr0)\]"
export PS1