私は、実際のシェルコマンドが異なる色で表示されるカスタムPS1カラーを使用して、入力したコマンドをすばやく確認し、コマンド出力自体と区別することができます。
PS1のコマンドプロンプトの色が「青」に設定され、私のシェルのデフォルトの色が白であるとしましょう。
- lsなどのコマンドを入力します。 (ls -l は青です。)
- 生成された出力、最初の行はまだ青です。
- 残りの線はすべて白です。
私が望むのは、コマンド以降のすべての出力が「白」になることです。
他の例:
- "cat"というコマンドを入力しましたが、色は青です。
- 出力が出て、出力全体が青です。
「青色」と入力するコマンドプロンプトを保持しながら、出力を「白色」にしたいと思います。
一部のコマンドでは問題ありませんが、他のコマンドでは同じ色が出力の最初の行にあふれ、デフォルトの色が始まり、他のコマンドでは出力全体(catなど)が同じ色を持ちます。
入力したコマンドだけを1つの色に保ち、残りをデフォルトの色に保つ方法はありますか?
私はOSXを使用しています。
編集#1
私が探しているものを示すコメントにリンクされている@derobertのスクリーンショットは次のとおりです。
答え1
デフォルトでは、bashがコマンドを実行する前に端末の色をリセットしようとします。これは通過できますtrap
。
たとえば、
trap '[[ -t 1 ]] && tput sgr0' DEBUG
BashはDEBUG
コマンドの直前にトラップを実行するので、tput sgr0
すべてのコマンドの前に(フォーマットリセット属性)が実行されます。
これは[[ -t 1 ]]
STDOUTが実際に端末であることを確認するための安全検査です。場合によっては、bashのSTDOUTが端末(パイプ、リモートSSHなど)に接続されていない可能性があるため、端末tput
エスケープコードを送信したくない場合があります。