bash プロンプトをカスタマイズしようとしています。存在しないコマンドを入力したり、何らかの理由で失敗した場合に色を変えたいです。私は bash スクリプトのコーディングにかなり慣れていないので、他のスクリプトを調べて助けを求めましたが、何かが機能していません。これが私のコードです:
export PROMPT_COMMAND="
PS1='`
if [ $? -eq 0 ];
then echo '
\[\033[00;32m\]┌─\[\033[00;35m\]\u\[\033[01;32m\]@
\[\033[00;35m\]\h\n\[\033[00;32m\]└─\[\033[01;32m\]
(\[\033[01;35m\]\W\[\033[01;32m\])\[\033[00;32m\]\$';
else echo '
\[\033[00;31m\]┌─\[\033[00;35m\]\u\[\033[01;31m\]@
\[\033[00;35m\]\h\n\[\033[00;31m\]└─\[\033[01;31m\]
(\[\033[35m\]\W\[\033[31m\])\[\033[00;31m\]\$';
fi`\[\033[0m\]'"
実際のコードには改行はありません。PS1 では煩雑になるため、コードを読みやすくするために改行を追加しただけです。
それで、終了ステータスを比較したいのですが、$? 、0に。何らかの理由で変数 $? スクリプトではまったく変更されません。0のままなので、誤ったコマンドを発行した場合でも、最初の条件は常に true になります。echo $?を追加してみました。if-case の前のコードに、echo $?を発行しても、これは常に 0 を返します。ターミナルへのコマンドとして、別のものを返します。作業コードを自分のものにコピーしようとしましたが、それでも解決しません。また、外側の引用として'を使用し、2 番目の引用として"を使用した場合にも機能しました。これを変更したのは、スクリプトが(を文字として受け入れないためです。
これがなぜなのか、どうすれば修正できるのでしょうか?