ls
を実行すると、色付きの出力が得られます。これは、ファイルの種類をすばやく確認するのに非常に便利です。 -r
フラグと-R
フラグを使用しても、less
にパイプで接続しようとすると、色が常に失われます。 zsh
バージョン5.0.7を使用しています。何か案は?ありがとう。
編集:私はOS Xを使用しています。
これは仕様によるものです。通常、カラー出力を生成するプログラムは、出力がターミナルまたは通常のファイルに送信されたときではなく、ターミナルに送信されたときにのみそれを行います。その理由は、端末に送信されたデータはおそらく人間によって読み取られますが、プログラムにパイプされたデータやファイルに書き込まれたデータは、一部のプログラムによって解析される可能性が高いため、色を変えるエスケープシーケンスなどの無関係なコンテンツを含めることはできません。
GNU ls
は、オプション--color
(または--color=auto
)を渡すと、端末に色付きの出力を表示します。標準出力のファイルタイプに関係なくカラー出力を強制するには、--color=always
または--color=yes
を渡します(これらは同義語です)。この慣習には、GNU grep、FreeBSD grep、git diff
などのような他のコマンドが続きました。
ls --colors=yes -l | less
FreeBSDバージョンのls
(OSXにもあり、OpenBSDおよびNetBSDのcolorls
ポートとして利用可能)では、オプション-G
を渡して、出力がターミナル。出力ファイルのタイプに関係なく色を表示するように環境CLICOLOR_FORCE
を設定します。
CLICOLOR_FORCE=1 ls -l | less
問題はおそらくls
プログラムがオプション--color=auto
を設定していることです。これは基本的に、出力がターミナルに接続されている場合にのみ色付けする必要があることを意味します。色が出ます。
色が欲しい場合は、--color
オプションをalways
に設定する必要があります。
ls --color=always | less -R
この振る舞いがいつも期待するものである場合は、単にエイリアスを作成します。
alias ls='ls --color=always'
担当者が50人に満たないため、@ jimmijの回答にコメントすることはできませんが、Bashで何がうまくいったかを説明したいと思います。
走れば
$ man ls | grep color
特定のシェル環境(この場合はman
)のbash
- pageのすべてのエントリが表示されます。
私にとっては、次の調整でうまくいきました:
$ alias ls='ls -G'