ティーへのパイピング中に色を保持


回答:


84

unbuffer実際に別の実行可能ファイルにパイピングしている場合でも、コマンドの前に挿入するだけで、インタラクティブな出力に書き込んでいると思わせることができます。これは、の場合に色を保持しlsます。

例えば

unbuffer ls -l --color=auto | tee output.log

まだインストールしていない場合は、Ubuntuや他のDebian風のLinuxディストリビューションにインストールunbufferしてインストールできます。

sudo apt-get install expect-dev

6
何もインストールする必要のない別のソリューションは、stackoverflow.com
questions / 3515208 /…にあります

3
これにより、結果のファイルにカラーコードが含まれます(もちろん)。その後、カラーコードを使用して端末に色を適切に表示する方法でファイルを印刷する方法はありますか?
カイルストランド

2
ええと、パスワードエントリでパスワードがクリアテキストで表示されます!
AndiDog

@Tgr OS Xでは、その解決策は生の色付きの出力を取得しようとしては機能しませんでしたxcodebuildunbuffer xcodebuild | less -Rしかし、完璧に働きました。
スリップD.トンプソン

2
expect-devパッケージは必要ありません。expect十分です。
矢城

11

lsオプションを使用します --color=always

--color=auto 明らかな理由で、出力をパイプラインに色付けしません。

メインページには次のように記載されています。

--color = autoを使用すると、標準出力が端末(tty)に接続されている場合にのみカラーコードが出力されます。


2
OK。なるほどね。しかし、画面の色をどうにかして見ることができますか?(結局TTYです)。それらをログファイルに入れなくても構いませんが、画面に表示したいはずです。
パウェウゴチッキ

私は自分自身を十分に明確にしていないと思います。ls -lほんの一例でした。にパイプすると色を削除するまったく異なるコマンド(herokuログ)がありteeます。そして、私が実行しているコマンドではなく、T /パイプを「修正/変更」したい。
パウェウゴチッキ

1
@Pawel、ティー/パイプはこれらのカラーコードを剥がさないので、ティー/パイプで簡単に修正することはできません。問題は、初期コマンドが端末への書き込みではないことを認識していることです。パイプのように動作するが、コマンドは端末と見なされる擬似端末が必要です。
RedGrittyBrick

うーん...十分に公平。私はそれがそうであることを受け入れる必要があると思います。
パウェウゴチッキ

3
@PawełGościckiこの回答はの問題を修正するだけですls。herokuログを含むすべてのプログラムの問題を修正する私の答えをご覧ください。
イーモンオブライエン系統14年

3

script受け入れられた回答のコメントに記載されているソリューションを拡張します。コマンドを含むexpectパッケージscriptをインストールできない、またはインストールしたくない場合に使用すると便利です。unbuffer

印刷 ls標準出力とファイルへの出力をカラーコードで

script -efq output.log -c "ls -l --color=auto"

ここで(man script):

  -e, --return
         Return the exit code of the child process.  Uses the same
         format as bash termination on signal termination exit code is 128+n.
  -f, --flush
         Flush output after each write.  This is nice for telecooperation:
        one person does `mkfifo foo; script -f foo', and another can 
        supervise real-time what is being done using `cat foo'.
  -q, --quiet
         Be quiet (do not write start and done messages to either 
         standard output or the typescript file).

出力ファイルを色付きで表示します。

less -r output.log

2
-eと同じです--return-両方の必要はありません。-efqです--return --flush --quiet
ノエル・マースク

@NoelMaerskありがとう。パラメーターの説明を回答に組み込みました。
Juuso Ohtonen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.