回答:
unbuffer
実際に別の実行可能ファイルにパイピングしている場合でも、コマンドの前に挿入するだけで、インタラクティブな出力に書き込んでいると思わせることができます。これは、の場合に色を保持しls
ます。
例えば
unbuffer ls -l --color=auto | tee output.log
まだインストールしていない場合は、Ubuntuや他のDebian風のLinuxディストリビューションにインストールunbuffer
してインストールできます。
sudo apt-get install expect-dev
xcodebuild
。 unbuffer xcodebuild | less -R
しかし、完璧に働きました。
expect-dev
パッケージは必要ありません。expect
十分です。
lsオプションを使用します --color=always
--color=auto
明らかな理由で、出力をパイプラインに色付けしません。
メインページには次のように記載されています。
--color = autoを使用すると、標準出力が端末(tty)に接続されている場合にのみカラーコードが出力されます。
ls -l
ほんの一例でした。にパイプすると色を削除するまったく異なるコマンド(herokuログ)がありtee
ます。そして、私が実行しているコマンドではなく、T /パイプを「修正/変更」したい。
ls
。herokuログを含むすべてのプログラムの問題を修正する私の答えをご覧ください。
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
-e
と同じです--return
-両方の必要はありません。-efq
です--return --flush --quiet
。