ページャーなしでプログラム(grep
またはls
)を実行すると、その出力に色が付きます。ただし、出力をにパイピングして実行するとless
、色が表示されません。
たとえば、次のコマンドは色付きの出力を出力します。
grep -r something
しかし、これはしません:
grep -r something | less
どうして?どうすれば色を見ることができless
ますか?
python-pygments
か?
ページャーなしでプログラム(grep
またはls
)を実行すると、その出力に色が付きます。ただし、出力をにパイピングして実行するとless
、色が表示されません。
たとえば、次のコマンドは色付きの出力を出力します。
grep -r something
しかし、これはしません:
grep -r something | less
どうして?どうすれば色を見ることができless
ますか?
python-pygments
か?
回答:
ここには2つの問題があります。
ls
色のサポートを自動検出するようなコマンドは、パイプからのサポートを見つけませんless
デフォルトでカラーコードを表示するように設定されています。両方とも克服できますが、少し不格好です:
ls --color=always | less -R
これはls
特定のものではありません。色をサポートする多くのコマンドには、オーバーライド引数もあります。
もう少し詳細な答えはls
、STDOUTが実際の端末に属しているかどうかを確認することです。パイプを回すと、STDOUTは次のコマンドのSTDINに設定されます。
これは、ls
ソースコードで作業中に確認できます。使っているisatty
状況が何であるかを動作させるコマンド(コアPOSIXインターフェイスを):
デフォルトで色はオンです:
print_with_color = (i == color_always
|| (i == color_if_tty
&& isatty (STDOUT_FILENO)));
複数の列に出力しようとしていますか:
if (format == long_format)
format = (isatty (STDOUT_FILENO) ? many_per_line : one_per_line);
//...
if (isatty (STDOUT_FILENO))
{
format = many_per_line;
set_quoting_style (NULL, shell_escape_quoting_style);
qmark_funny_chars = true;
}
else
{
format = one_per_line;
qmark_funny_chars = false;
}
grep
明示的にオーバーライドされない限り、非常に似たようなことを行い、色のサポートを検出しますisatty
:
color_option = isatty (STDOUT_FILENO) && should_colorize ();
--color
、引数を:ack-grep -i select --color | less -R
-C
引数を使用して列を強制できます。
less
より一般的に色に興味がある場合は、をご覧くださいlesspipe.sh
。たとえば、http://freecode.com/projects/lesspipeを参照してください。
lesspipe.shは、lessのマニュアルページで説明されているページャーlessの入力フィルターです。スクリプトはksh互換シェル(bash、zshなど)で実行され、lessを使用して、バイナリコンテンツのファイル、圧縮ファイル、アーカイブ、およびアーカイブに含まれるファイルを表示できます。
また、テキストエディターと同様にシェルスクリプト、perlスクリプトなどを色付けしますが、色付けを行うための「前処理」プログラムは使用しません。
grep --color=always "search string" * | less -R
しかし、私はmost
最近ではなくを使用する傾向がありますless
。また:gnu.org/software/src-highliteはカラーハイライター(あまり機能しません)