リダイレクトストリームにエスケープシーケンスが表示されない、またはカラー出力の実装方法が表示されないのはなぜですか? [コピー]

リダイレクトストリームにエスケープシーケンスが表示されない、またはカラー出力の実装方法が表示されないのはなぜですか? [コピー]

端末で実行すると、ls出力色が異なります。

ls コンソール出力

私が知る限り、この色付けはespaceシーケンス(vt)を通して行われます。

ただし、実行中はls | hexdump -cC文字とLFのみが表示されます。ファイルにリダイレクトすると、同様の結果が表示されます。

LS | hexdump -cC コンソール出力

どのように?

答え1

GNUは、lsファイルやパイプにリダイレクトするのではなく、端末に書き込むときにのみカラーテキストのエスケープシーケンスを出力します。

これを行うにはを使用しますls --color=always

GNUlsマニュアルは次のように述べています。

   Using color to distinguish file types is disabled both by default and
   with --color=never.  With --color=auto, ls emits color codes only when
   standard output is connected to a terminal.  [...]

lsあなたのコマンドはls --color=auto基本的にエイリアスを使って動作するように推測されますls

関連情報