コマンドの終わりにbashシェルPS1の色を停止する方法は?

コマンドの終わりにbashシェルPS1の色を停止する方法は?

私は、実際のシェルコマンドが異なる色で表示されるカスタムPS1カラーを使用して、入力したコマンドをすばやく確認し、コマンド出力自体と区別することができます。

PS1のコマンドプロンプトの色が「青」に設定され、私のシェルのデフォルトの色が白であるとしましょう。

  • lsなどのコマンドを入力します。 (ls -l は青です。)
  • 生成された出力、最初の行はまだ青です。
  • 残りの線はすべて白です。

私が望むのは、コマンド以降のすべての出力が「白」になることです。

他の例:

  • "cat"というコマンドを入力しましたが、色は青です。
  • 出力が出て、出力全体が青です。

「青色」と入力するコマンドプロンプトを保持しながら、出力を「白色」にしたいと思います。

一部のコマンドでは問題ありませんが、他のコマンドでは同じ色が出力の最初の行にあふれ、デフォルトの色が始まり、他のコマンドでは出力全体(catなど)が同じ色を持ちます。

入力したコマンドだけを1つの色に保ち、残りをデフォルトの色に保つ方法はありますか?

私はOSXを使用しています。

編集#1

私が探しているものを示すコメントにリンクされている@derobertのスクリーンショットは次のとおりです。

                 番号1

ベストアンサー1

デフォルトでは、bashがコマンドを実行する前に端末の色をリセットしようとします。これは通過できますtrap

たとえば、

trap '[[ -t 1 ]] && tput sgr0' DEBUG

BashはDEBUGコマンドの直前にトラップを実行するので、tput sgr0すべてのコマンドの前に(フォーマットリセット属性)が実行されます。

これは[[ -t 1 ]]STDOUTが実際に端末であることを確認するための安全検査です。場合によっては、bashのSTDOUTが端末(パイプ、リモートSSHなど)に接続されていない可能性があるため、端末tputエスケープコードを送信したくない場合があります。

おすすめ記事