web-dev-qa-db-ja.com

ティーにパイピングしながら色を保持する

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

パイプ/ティーなしでそれは着色されています。 teeを使用している間、色を維持できるようにするにはどうすればよいですか(画面でのみ色を付けることができます。ログの色は気にしません)。

69

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

例えば

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

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

Sudo apt-get install expect-dev
92

Lsオプションを使用する--color=always

--color=autoは、パイプラインへの出力に色を付けません-明らかな理由があります。

メインページには次のように書かれています。

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

12
RedGrittyBrick

受け入れられた回答のコメントに記載されているscriptソリューションを展開します。 scriptの使用は、unbufferコマンド。

Printls stdoutへの出力とファイルとカラーコード

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).

View色付きの出力ファイル:

less -r output.log
4
Juuso Ohtonen