web-dev-qa-db-ja.com

STDOUTとSTDERRの両方の色を永続的に灰色に変更するにはどうすればよいですか?

この質問は STDERRとSTDOUTを異なる色で印刷するようにシェルを構成できますか? に似ています。

しかし、私はSTDOUTとSTDERRの両方を1色に変更することを可能にする解決策を探しています。上記のリンクからの回答に記載されているように、これは問題があり、問題を引き起こす可能性があるため、STDOUTとSTDERRに異なる色を設定しようとはしていません。

UnixとLinuxについてよく知らないので、お詫びします。 .bashrcまたは.bash_profileに数行を追加して永続的に STDOUTとSTDERRの色を変更できるソリューションを探しています。

7
user1769197

STDOUTとSTDERRには色がありません。色があるのは端末(エミュレーター)です。 one前景色(および1つの背景色)を一度に設定します。

また、STDOUTとSTDERRは特異ではなく、プロセスごと出力ストリームであることに注意してください。すべてのプログラムに適用されるグローバルSTDOUTはありません。これらのストリームは端末にルーティングされますが、プロセスごとに異なります。

ターミナルエミュレータには通常、メニューを介してパレットを設定する方法があります。たとえば、デフォルトのフォアグラウンドbothを介して受信したデータに適用されます) STDOUTおよびSTDERRストリーム)は何でもかまいません。 プロンプトのANSIカラーコード および色をリセットしない場合最後に\[\033[0m\]を付けて適用することもできますが、引き続き適用されます。一部のアプリケーションはこれらを使用してリセットするため、リセットは端末のデフォルトに戻るため、これはあまり理想的な方法ではないことに注意してください。

ターミナルのフォアグラウンドの設定が希望どおりでない場合は、プロセスごとにSTDOUT/STDERRをフィルタリングできます。 ここでの提案 を参照してください。

8
goldilocks

16色以上をサポートする端末でzshを使用する場合àlaxterm

preexec() printf '\e[90m' # set foreground color to grey before running
                          # the command

precmd() printf '\e[m' # reset the foreground color before issuing the
                       # next Prompt.

コマンドによって、端末の前景色自体が変更される場合があることに注意してください。

7

これは XY-problem の質問のようです-目的の解決策を得るために正しいことを求めていません:

出力に色が付いていて、画面の空の部分が別の色であるか、文字で埋められていると仮定します。

出力がこれらのケースをどのように探すかを考えてください。

行?スペース文字のみで埋められた行? 1つのスペース文字のみの行? 1つのタブで? 1つのスペースと1つのタブで? 1つのタブと1つのスペースで?はい、彼らはすべて異なって見える

または、空の行は次のようになります --空の行だけですか?
その場合、実際には出力ストリームに色を付けたくありません。この回答が適用されます


@StéphaneChazelasのソリューションにも同様のアプローチを示しますが、「逆」です。

あなたcan、技術的には、STDOUTとSTDERRの色、行ごと、両方の行の開始と終了に適切な色のエスケープコードを追加しますストリーム。

色をリセットするように注意してください少なくとも各行。そうしないと、lsのような色を使用するプログラムは端末を台無しにするになるからです。
出力色をあまり制御できないしているだけなので、うまくいくのは難しいです。

しかし:あなたは他のすべて使用される色を制御できますよね?
そしてあなた1つだけ必要この場合の色?すごい!

端末のデフォルトの色を設定をSTDOUT/STDERRの色に設定し、残りの色を好きなように色付けします。

あなたはあなたを着色することができますシェルプロンプト-そしてプロンプトコードを使用して他の部分も着色することができます。
確かに、コマンドを編集する場所は多少コマンドラインに色を付けるのが難しいですが、確かに可能です。ただし、bashを使用できる場合は、zshでそれを試さないでください。プロンプト処理コードそれだけmore柔軟そこに-それはあなたが必要とするものです。

ここで、端末のデフォルトの前景色を灰色に設定し、場合によっては背景色に設定しますが、透明/未定義のままにしてください。

コマンドラインの背景色を設定するには、次の例を参照してください プロンプトテーマを変更するときにzshでコマンドラインの背景色を変更します

Prompt="%{$bg[cyan]%}%{$fg[red]%}%n%{$reset_color%}%{$bg[cyan]%}@%{$fg[red]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%{$bg[cyan]%}%% "

Shell Prompt example

(難しいのは、さまざまな状況でlinの未使用のエンドセクションを正しく取得することです。)

1
Volker Siegel