「少ない」出力色を作成するにはどうすればよいですか?


25

ページャーなしでプログラム(grepまたはls)を実行すると、その出力に色が付きます。ただし、出力をにパイピングして実行するとless、色が表示されません。

たとえば、次のコマンドは色付きの出力を出力します。

grep -r something

しかし、これはしません:

grep -r something | less

どうして?どうすれば色を見ることができlessますか?


5
grep --color=always "search string" * | less -Rしかし、私はmost最近ではなくを使用する傾向がありますless。また:gnu.org/software/src-highliteはカラーハイライター(あまり機能しません)
Rinzwind 14年

@alexをインストールしましたpython-pygmentsか?
souravc 14年

@souravcいいえ、私はそれをインストールしませんでした
モハンマドレザレズワニ

@alesは私を無視しますか?>:-D
リンツウィンド

回答:


36

ここには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 ();

1
今日の私の最後の賛成票(上限に達した)は、100kであなたをサポートします。しかし、私とRinzwindはそれが起こったときにケーキが欲しいです。
hytromo

私はack-grepという名前のプログラムをダウンロードしました。ack-grep fooと入力すると、すべてのサブディレクトリでfooが検索されます。少なく、色が消えました。しかし、このプログラムは「--color =常に」、何の助けに感謝サポートしていないようだ
モハマド・レザ・Rezwani

1
@alex ACKがあり--color、引数を:ack-grep -i select --color | less -R
オリ

@Oli .........ああ、私の神........あなたの知識と助け、そしてLinuxの力について私が言える唯一のこと
Mohammad Reza Rezwani 14年

1
@ B1KMusic同意します。私は非常に同意し、それがどのように機能するを見つけ、答えを更新しました。-C引数を使用して列を強制できます。
オリ

2

lessより一般的に色に興味がある場合は、をご覧くださいlesspipe.sh。たとえば、http://freecode.com/projects/lesspipeを参照してください

lesspipe.shは、lessのマニュアルページで説明されているページャーlessの入力フィルターです。スクリプトはksh互換シェル(bash、zshなど)で実行され、lessを使用して、バイナリコンテンツのファイル、圧縮ファイル、アーカイブ、およびアーカイブに含まれるファイルを表示できます。

また、テキストエディターと同様にシェルスクリプト、perlスクリプトなどを色付けしますが、色付けを行うための「前処理」プログラムは使用しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.