lsまたはtreeの出力をパイピングして色が失われないようにしますか?


12

treeまた、lsファイル名に異なる色を付けることでファイルの種類を区別できます。

treeそしてls多くの場合、出力(ディレクトリを含む)のファイルの長いリストなので、私のパイプをstdout出力しますless

ただしless、色は保持されません。どうすれば色を表示させることができますか?

リンクされたリストを見ただけですが、パイピングless -Rまたはless -r機能しません。私のOSはUbuntu 12.04です。lessバージョン444:2011年6月9日です。


1
@JosephR。もう1つの質問は半関連ですが、重複ではありません。ここでは、話をしているls(いないtree)そのためにいくつかの実装が出力端子に行かないとき(ほかにに力のカラー出力に言われる必要があるless -R必要されている)
ステファンChazelas

試しましたtree -C | less -Rか?この-Cオプションは、lessと同等のツリーです--color=always(少なくとも、Ubuntu 12.04では動作します)。
スチールドライバー14

@steeldriverありがとう。できます。単独の場合tree-C単独の場合は常に色で出力されますが、一緒に使用するとなぜ異なるのlessですか?
ティム14

@Tim 2つの理由:1. lessデフォルトで削除した色を、あなたがそれを与える場合を除き-R、それを残すためにそれを伝えオプション、および2 treels、彼らは彼らの出力を別のプログラムに起こっている検出したときに他のプログラムを通常オフ着色ターン(のようなless-Cまたはで色付けを強制しない限り、端末に直接ではなく--color=always
jw013

2
あなたが書いているこのリンクリストとは何ですか?
アントン

回答:


15

「自動」モードで色を使用するようにls --color=auto指示lsするを使用していると仮定します。「自動」モードはless、STDOUTが端末であるかどうかを確認し、そうである場合は色を使用し、そうでない場合は色を使用しません。にパイプlsするとless、STDOUTは端末ではなくless、標準のパイプであるのSTDINに接続されます。

ソリューション、使用ls --colorまたはls --color=always

ただし、これは別の潜在的な問題につながります。によってはless、色が表示されない場合がありますが、代わりにエスケープコードが表示されます。解決策はを使用することless -Rです。これはless、ANSIカラーエスケープのエスケープコードをパススルーするように指示します。使用する-rと、長さが正しく計算されないため、長い行が回り込む問題が発生するため、使用しないでください。

完全なソリューション:

ls --color | less -R

同様にtree

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