カラー出力を生成するbashスクリプトを作成しました。インタラクティブシェルからスクリプトを呼び出すと、色が良好です。ただし、出力が別のスクリプトで処理されたりパイプを通過したりする場合は、色を指定しないでください(私の考えでは)。
この状況は通常どのように処理されますか?カラー出力をオンまたはオフにするオプションを提供する必要がありますか、それともスクリプトがそれを自動的に検出する方法はありますか?自動的に動作することが望ましく、スクリプト呼び出しに応じて色/無色を出力するのに最小限のコードしか必要ありません。
自動検出の1つの問題は、スクリプトが常に非対話型で実行されることです。したがって、親シェルの対話型状態を知る必要があります。
答え1
カラー出力(たとえば、grep
およびls
)をサポートするUNIXアプリケーションには通常コマンドラインオプションがあり、自動検出も可能です。
man ls
私たちを見てください
--color[=WHEN]
colorize the output. WHEN defaults to `always' or can be `never' or `auto'. More info below
auto
したがって、デフォルトではlsは常に色を使用するため、このオプションに注意してください。
man grep
次のようなものを見せてください
--color[=WHEN], --colour[=WHEN]
<snipped> WHEN is never, always, or auto.
そのオプションが有効になっている場合auto
(アプリケーションのデフォルト値になる可能性がある)、次の答えが見つかります(Gilesが提案)。https://unix.stackexchange.com/a/10065/4635
つまり、出力が端末で行われ、色をサポートし、ユーザーがそれを無効にしていない場合は、色を使用する必要があります。もちろん、ユーザーはこのチェックを使用always
またはnever
スキップします。
プログラムが--color=always
自動検出をサポートしていても、「私がよりよく知っているとき」色を強制的に使用できるという意味なので、役に立つと思います(対象が端末ではないが色をサポートしていることを知っていると仮定)。 。一部のシステムls
では、エイリアスがls --color=always
。