
私はこの質問について多くの順列を見ましたが、それらのどれもまったく重複していないと思います。
保持しながら、stderr(または最終的にstderrとstdin)のみをファイルにコピーできます。カラフル画面に出力(ファイルにも色があると良いと思います)
答え1
各コマンドには、他の回答に示すように、常にカラーエスケープコードを送信する特別なコマンドがあります。ただし、より一般的なアプローチは、次のツールを使用することです。
バッファリング解除
unbuffer ls -l --color=auto | tee output.log
unbuffer
の命令です予想されるパック。
参照番号スーパーユーザー - Tシャツに配管するときに色を維持する
スクリプト
script --flush --quiet --command "ls -l --color=auto" | tee output.log
script
の命令ですユーティリティLinuxパック。
答え2
パイピングやリダイレクトで色は削除されません!
使用する初期コマンドで出力が端末ではないことを確認すると、色が削除されます。したがって、この質問に対する一般的な回答としては使用できません。
たとえば、以下を参照してくださいman ls
。
ls
カラーコードは、標準出力が端末に接続されている場合にのみ表示されます。
を使用して動作を変更できます--color=always
。
また適用されますgrep
:
--color[=WHEN], --colour[=WHEN]
Surround the matched (non-empty) strings, matching lines, context lines, file names, line numbers, byte offsets, and separators (for fields
and groups of context lines) with escape sequences to display them in color on the terminal. The colors are defined by the environment
variable GREP_COLORS. The deprecated environment variable GREP_COLOR is still supported, but its setting does not have priority. WHEN is
never, always, or auto.
たとえば、
echo 123 | grep --color=always 2 | tee file
...2
端末とファイルの出力に色を提供します。
出力には色が含まれていますが、いいえファイルで次の質問に対する回答を確認できます。この問題次に、次のように実行します。
echo 123 | grep --color=always 2 | tee /dev/tty | ansi2txt > file