- hostname(screen#):directory$
最後のコマンドが正常に完了すると緑、失敗すると赤で表示されるbashプロンプトを設定しようとします。これまで私が持っているのは次のとおりです。実際に操作を実行しますが、コマンドがラップされると表示の問題が発生するようです。
PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m'; else echo '\e[31m' ; fi\` - \h(${WINDOW}):\W$\e[00m "
Googleで見つけた質問とても役に立つ投稿です。あるコメントでは、印刷されていない文字をラップしてこの問題を回避すると述べ\\[
ました\\]
。だから私は以下を試しましたが、問題は解決せず、色の変更も中止されました。
PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m'; else echo '\e[31m' ; fi\`\] - \h(${WINDOW}):\W$\[\e[00m\] "
このプロンプトの構造(色を含む)を維持しながら長いコマンドが正しく表示されるように変更するにはどうすればよいですか?
ベストアンサー1
奇妙な色のプロンプトが表示されますが、bashは私の端末の幅を知らないようです。改行が間違っています。
これを行うもう一つの正しい方法があります。このコードをあなたのコードに入れるか、~/.bashrc
新しいファイルを作成して次の手順を実行しますsource file
。
PROMPT_COMMAND=$(
cat<<-'EOF'
retval=$?
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
STOP=$(tput sgr0)
# arithmetic using bash parameter expansion on a array
if (($retval + ${PIPESTATUS[@]/%/+} + 0)); then
PS1="\[$RED\]\u@\h:\w$ \[$STOP\]"
else
PS1="\[$GREEN\]\u@\h:\w$ \[$STOP\]"
fi
EOF
)
それはすべて=)
PROMPT_COMMAND
Bash は各コマンドに対して内部でコードを実行します。
コピー/貼り付けに問題がある場合、スクリプトをダウンロードできます。
説明する
(( ))
算術ですbash
。参考http://wiki.bash-hackers.org/syntax/arith_exprPROMPT_COMMAND
:設定されている場合、この値は各デフォルトプロンプトが実行される前にコマンドとして実行されます。バラよりman bash | less +/PROMPT_COMMAND
tput
ANSIエスケープコードをハードコーディングするよりも優れています。バラよりhttp://wiki.bash-hackers.org/scripting/terminalcodesPIPESTATUS
:フォアグラウンドパイプラインで最後に実行されたプロセスの終了ステータス値のリストを含む配列変数(単一のコマンドのみを含めることができます)。バラよりman bash | less +/PIPESTATUS
cat<<-'EOF'
特別ここに文書があります:この-
文字はコードをインデントできることを意味し、一重引用符は'EOF'
変数が挿入されていないことを意味します。