コマンドプロンプト(PS1)でこのコードを直接使用すると、前のコマンドが正しく実行されたかどうかがわかります。
PS1="\`if [ \$? = 0 ]; then echo -e \"\e[1;32m[⚡️ ]\"\e[0m; else echo -e \"\e[1;31m[
ベストアンサー1
PS1="\`if [ \$? = 0 ]; then ... fi\`
アップデート:だから単純な「$()」を試しましたが、うまくいきません。また、今スラッシュ("\ $()")を追加すると動作するため、さらに混乱しています。
これは\
スラッシュではなくバックスラッシュです。
ここでエスケープする理由$
は、最初のスニペットでバックティックをエスケープした理由と同じです。そうしないと、コマンド置換が拡張されるからです。まもなく、設定するとプロンプトの生成には使用されPS1
ませんPS1
。
割り当ての周りに一重引用符を使用することをお勧めします。これにより、変数の拡張や文字列全体のコマンドの置換が防止されます。
PS1='$(if [ $? != 0 ]; then echo -e "\[\e[1;31m\][boom]\[\e[0m\] "; fi)\u@\h \w\$ '
\[ ... \]
bashに印刷されず、プロンプトの幅を計算するときに考慮すべきではないことを知らせるために、エスケープコードをラップする必要があります。手動)。 (Bashが使用しているグラフィック文字を正しく処理しているかどうかわからないため、テストできません。)