web-dev-qa-db-ja.com

出力ではなく、入力テキストの色を変更する

入力したコマンドが他のコマンドから視覚的に「目立つ」端末のスクリーンショットをキャプチャする必要があります。現在、これを使用して、入力したコマンドを「赤」にします。

PS1='\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[0;34m\]\$ \[\e[m\]\[\e[0;31m\]'

問題は、入力したテキストだけでなく、プロンプトの後のすべてが赤くなることです。

red linux output

どうすればこれを修正できますか?

私はbash(CentOS 7)を使用しています。

トラップを使用してこれを達成できます:trap 'echo -ne "\e[0m"' DEBUG

Bashの男によると:DEBUGのトラップが実行されます

すべての単純なコマンドの前、コマンドの場合、ケースコマンド、選択コマンド、コマンドのすべての算術、および最初のコマンドがシェル関数で実行される前

したがって、コマンドを実行するたびに、シェルは\e[0mを挿入して、前のカラーコードを無効にします。コマンドが実行された後、プロンプトを介して再設定するためだけです。

私はここで明らかにハックトリックを見つけました: https://wiki.archlinux.org/index.php/Color_Bash_Prompt#Different_colors_for_text_entry_and_console_output

6