Bashプロンプトは長いコマンドを中断しません

Bashプロンプトは長いコマンドを中断しません

- 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_COMMANDBash は各コマンドに対して内部でコードを実行します。

コピー/貼り付けに問題がある場合、スクリプトをダウンロードできます。

出力

説明する

  • (( ))算術ですbash。参考http://wiki.bash-hackers.org/syntax/arith_expr
  • PROMPT_COMMAND:設定されている場合、この値は各デフォルトプロンプトが実行される前にコマンドとして実行されます。バラよりman bash | less +/PROMPT_COMMAND
  • tputANSIエスケープコードをハードコーディングするよりも優れています。バラよりhttp://wiki.bash-hackers.org/scripting/terminalcodes
  • PIPESTATUS:フォアグラウンドパイプラインで最後に実行されたプロセスの終了ステータス値のリストを含む配列変数(単一のコマンドのみを含めることができます)。バラよりman bash | less +/PIPESTATUS
  • cat<<-'EOF'特別ここに文書があります:この-文字はコードをインデントできることを意味し、一重引用符は'EOF'変数が挿入されていないことを意味します。

おすすめ記事