web-dev-qa-db-ja.com

色付きのファイルに標準出力を書き込む方法は?

多くの場合(常にではありません)、標準出力は色で表示されます。通常、すべての出力ログも別のファイルに保存します。当然、ファイル内では、色はもう表示されません。

Console color output example

(Linuxで)出力を色付きのファイルに書き込む方法があるかどうかを知りたい。私はteeを使用してvagrantの出力をファイルに書き込もうとしているので、この方法で出力を見ることができます(適用される場合)。浮浪者専用に使用したい(もちろん将来変更される可能性がある...)

32
AAlvz

多くのプログラムは、stdoutが端末の場合にのみカラーシーケンスを出力するため、この問題の一般的な解決策は、書き込むパイプが端末であると信じ込ませることです。これは、bsdutilsのscriptコマンドで可能です。

script -q -c "vagrant up" filename.txt

これにより、vagrant upからの出力がfilename.txt(およびターミナル)に書き込まれます。エコーが望ましくない場合、

script -q -c "vagrant up" filename > /dev/null

ファイルにのみ書き込みます。

28
Wintermute

出力を色付けするANSIシーケンスをファイルに保存できます。

echo a | grep --color=always . > colour.txt
cat colour.txt

ただし、一部のプログラムではnot toが出力が端末に届かない場合に使用する傾向があります(そのため、--color-alwaysgrepと共に使用する必要がありました)。

10
choroba

また、出力をさまざまな色のエコーで色付けし、色付きの出力をファイルに保存することもできます。例

echo -e '\E[37;44m'"Hello World" > my_file

また、端末の色コードを知っている必要があります

ティーを使用

< command line > |tee -a 'my_colour_file'

Catでファイルを開きます

cat 'my_colour_file'

名前付きパイプを使用すると、色付きのパイプからのすべての出力を別のファイルにリダイレクトすることもできます

例えば

名前付きパイプを作成する

mkfifo pipe.fifo

各コマンドラインは、次のようにパイプにリダイレクトします

<command line> > pipe.fifo

別のターミナルで、パイプからのすべてのメッセージをファイルにリダイレクトします

cat pipe.fifo > 'my_log_file_with_colours'

catでファイルを開き、期待される結果を確認します。

6
repzero

Ubuntuでは、パッケージbsdutilsをインストールしてANSIカラーコードのテキストファイル:に出力できます。

script -q -c "ls --color=always" /tmp/t

kbtinをインストールして、クリーンな[〜#〜] html [〜#〜]ファイルを生成します。

ls --color=always | ansi2html > /tmp/t.html

ahawkhtmltopdfをインストールしてNiceを生成します[〜#〜] pdf [〜#〜]

ls --color=always | aha | wkhtmltopdf - /tmp/t.pdf

上記のいずれかをteeとともに使用して、コンソールにも出力を表示するか、コピーを別のファイルに保存します。例:

ls --color=always | tee /dev/stderr | aha | wkhtmltopdf - /tmp/test.pdf
2
Ivan Ogai

ansi2html.shというツールを使用していることがわかりました

カラフルな端末データをhtmlファイルにエクスポートする最も簡単な方法は、

使用するコマンドは次のとおりです。

ls --color=always | ansi2html.sh --palette=solarized > ~/Desktop/ls.html
  • パイプを使用して出力を送信してから、標準出力を単純なhtmlファイルに出力するだけです。
2
Pini Cheyni