出力ではなく入力テキストの色を変更[重複]

出力ではなく入力テキストの色を変更[重複]

入力されたコマンドが視覚的に「目立つ」端末のスクリーンショットをキャプチャする必要があります。今、これを使って「red」と入力するコマンドを作成しています。

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

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

Red Linux出力

この問題をどのように解決できますか?

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

答え1

これを達成するためにトラップを使用することができる。 trap 'echo -ne "\e[0m"' DEBUG

DEBUGbash manによると:実行トラップ

すべての単純コマンドの前、forコマンド、caseコマンド、selectコマンド、コマンドのすべての算術演算前、シェル関数で最初のコマンドを実行する前

したがって、コマンドが実行されるたびに、シェルは\e[0m無効な古いカラーコードを挿入します。コマンドを実行した後、プロンプトでのみリセットしてください。

ここで許可されているハッキングを見つけました。https://wiki.archlinux.org/index.php/Color_Bash_Prompt#Different_colors_for_text_entry_and_console_output

答え2

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

次の例では、出力色を変更することでこの問題を解決できます。

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

上記のコマンドは、次の出力を緑色で表示します。

関連情報