コマンドの最後で停止するようにbashシェルPS1カラーを停止するにはどうすればよいですか?


12

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

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

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

私が欲しいのは、コマンドの後のすべての出力が「白」になることです。

もう一つの例:

  • コマンド「cat」を入力すると、色が青になります
  • 出力が来て、出力全体が青色です

「blue」と入力したコマンドプロンプトを維持しながら、出力を「白」にしたい

一部のコマンドでは問題ありませんが、他のコマンドでは、同じ色が出力の最初の行にオーバーフローしてから、デフォルトの色が適用され、他のいくつかのコマンドでは、出力全体(catなど)が同じ色になります。

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

私はOSXを使っています。

編集#1

@derobertがコメントでリンクしているスクリーンショットは、私が探しているものを示しています。

                 ss#1


2
エラーを特定できるように、プロンプトを表示する必要があります。
グレン・ジャックマン、2014

回答:


14

基本的には、bashがコマンドを実行する直前に端末の色をリセットしたいと考えています。これはtrap

例えば:

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

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

これ[[ -t 1 ]]は、STDOUTが実際に端末であることを確認するための安全チェックです。bashのSTDOUTがターミナルに接続されていない場合があり(パイピング、リモートsshなど)、tputターミナルエスケープコードを送信したくない場合があります。


これはどこに置くの?PS1が色を元に戻さないとします。次に、ユーザーがコマンドを入力してEnterキーを押した直後にこのコマンドを実行するために、この行をどのように追加しますか?
polym 14

1
@polym .bashrc(または$PS1設定されている場所)。私はそれを$PS1定義のすぐ隣に置いて、それらが関連していることを理解できるようにします。
Patrick 14

わかりました。これがうまくいかない可能性はありますか?
polym 14

@polymはこれ以上ありません
Patrick 14

素晴らしい、それはまさに私が端末の色をリセットするために必要なものです。
iQ。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.