gnome-terminal で PS1 のフォーマットをクリアするにはどうすればいいですか?

gnome-terminal で PS1 のフォーマットをクリアするにはどうすればいいですか?

カスタムカラーを設定するように設定しgnome-terminalました:.bashrc

PS1='${debian_chroot:+($debian_chroot)}\[\033[00;37m\][\[\033[00;32m\]\t\[\033[00;37m\]] \[\033[01;34m\]\u\[\033[00;37m\]@\[\033[01;34m\]\h\[\033[00;37m\]:\[\033[01;34m\]\w\[\033[01;32m\]$ '

つまり、次のようなものを実行すると、

ここに画像の説明を入力してください

最初の行は白であるべきで、入力したコマンドも緑色になるまでは白でしたが、出力は次のようになります。

ここに画像の説明を入力してください

では、コマンドの色を緑に設定しても、出力テキストの色が影響を受けないようにするにはどうすればよいでしょうか? 私は Ubuntu GNOME 15.04 と GNOME 3.16 を実行しています。

情報更新:

sudo rkhunter --nocolor --update実行時に出力がすべて緑色になることに気付きました。

答え1

問題は、コマンドを緑色に設定しているが、カラーエスケープコードを閉じていないことです。そのため、独自の書式設定が適用されていないコマンドの出力を含む、後続のすべての行がその色で表示されます。回避策として(ソース)、trapDEBUGシグナルにクローズコードを出力することができます。この行を~/bashrc

trap 'printf "\e[0m" "$_"' DEBUG

これは印刷されます\e[0m(開いているカラー コードが閉じられます)。これはシグナルtrapに ped されるためDEBUG、実行するコマンドの前に実行されます。つまり、ヒットしてから実際にコマンドが実行されるまでの間ですEnter。 で説明されているようにman bash:

sigspec が DEBUG の場合、コマンド arg は、すべての単純コマンド、for コマンド、case コマンド、select コマンド、すべての算術 for コマンドの前、およびシェル関数で最初のコマンドが実行される前に実行されます (上記のシェルの文法を参照)。

関連情報