lsコマンドのlessにカラー出力なし


21

実行するlsと、色付きの出力が得られ、ファイルの種類をすばやく確認するのに非常に便利です。and フラグを使用しlessてパイプしようとする-r-R、カラーリングは常に失われます。zshバージョン5.0.7 を使用しています。何か案は?ありがとう。

編集:私はOS Xを使用しています。


lsで呼び出されていることを確認できます--colorか?パイプラインを一時停止(^Z)するかps、別の端末から使用してみてください。どのような出力がwhich ls生成されますか?
-zackse

私はOPは明らかに、彼らが使用していると述べているので、近いキューからこれをクリアしless -r、それは問題ではありませんので、lessしかし、とls
terdon

これはまだ重複していないことに驚いていますが、私が見つけた最も近いものは変数のStoreコマンド出力で、スーパーユーザーのものです。
スコット

@Scott正確な複製があるかどうかはわかりませんが、答えが非常に似ている質問がいくつかあります(ls結果はstdoutに依存します)。私が覚えているのはunix.stackexchange.com/questions/157285/…であり、unix.stackexchange.com
questions

@jimmijしかし、これらの質問はls --color=auto、端末に書き込むとき(つまり、標準出力が端末であるとき)にのみ色を使用することを意味し、ファイルやパイプではないことを言及していません。
スコット

回答:


21

これは仕様によるものです。カラー出力を生成するプログラムは、通常、出力がパイプまたは通常のファイルに送信されるときではなく、出力が端末に送信されるときにのみそうします。理由は、端末に送信されたデータはおそらく人間によって読み取られますが、プログラムにパイプされたデータやファイルに書き込まれたデータは何らかのプログラムによって解析される可能性が高いため、色を変更するエスケープシーケンスのような無関係なコンテンツが含まれてはならないためです。

GNU lsは、オプション--color(または--color=auto)を渡すと、カラー出力を端末に表示します。標準出力のファイルタイプに関係なく色付き出力を強制するには、--color=alwaysまたは--color=yes(同義語です)を渡します。この規則には、GNU grep、FreeBSD grep git diffなどの他のコマンドが続きます。

ls --colors=yes -l | less

FreeBSDバージョンls(OSXにもあり、colorlsOpenBSDおよびNetBSDのポートとして入手可能)では-G、出力が端末の場合に色を表示するオプションを渡します。CLICOLOR_FORCE出力ファイルの種類に関係なく、色を表示する環境を設定します。

CLICOLOR_FORCE=1 ls -l | less

20

問題はおそらく、lsプログラムにオプションが設定されていることです。--color=autoこれは基本的に、出力が端末に接続されている場合にのみ色付けする必要があることを意味します。

このような場合に色を使いたい場合は、--colorオプションをalwaysに設定してください。

ls --color=always | less -R

この動作が常に予想されるものである場合は、エイリアスを作成するだけです。

alias ls='ls --color=always'

私の設定では、bashバージョン4.3、-colorは不正なオプションです。 "color"のグレーピングは "-G"オプションについて教えてくれますが、autoまたはalwaysオプションについては何も言いません。何か案は?
-nunos

5
@nunos lsはからbashではなく、スタンドアロンプ​​ログラムです。実行ls --versionしてバージョンを確認します。私はls GNU coreutils)8.21です。
-jimmij

@jimiijの私のlsバージョンには--versionフラグがありません。私はOS Xのデフォルトのものを使用していますが、それが役立つかどうかわかりません。
ヌース

@nunos は、常にオペレーティングシステムに言及してください。LinuxとOSXのような非GNU nixとの間には大きな違いがあります。
テルドン

0

私は50人未満の担当者しかいないため、@ jimmijの答えをコメントすることはできませんが、Bashで何がうまくいったかを説明したいと思います。

走ったら

$ man ls | grep color

man特定のシェル環境(この場合bash)の-pageのすべてのエントリが表示されます。

私にとって、次の調整がトリックを行いました:

$ alias ls='ls -G'

3
それは何のために働いたのですか?-Gフラグは、どのようにとは何の関係もありませんlsその色の出力を管理します。これは、の出力からグループを削除するだけですls -l。BSD ls(OSXでも使用される)のカラー出力に影響しますが、それはあなたの言うことですか?いずれにせよ、ファイルにリダイレクトされたときに色が表示されるとは思わず、コマンドラインに色が表示されるだけです。
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.