プロセスがパイプを介して出力されたときにエスケープコードを削除するにはどうすればよいですか? [コピー]

プロセスがパイプを介して出力されたときにエスケープコードを削除するにはどうすればよいですか? [コピー]

タイトルは奇妙ですが、質問を明確に説明するのは難しいです。

端末で実行すると、kitty --versionそのバージョンはstdoutとして印刷されますが、テキストのスタイルと色は次のようになります。

ここに画像の説明を入力してください。

これを達成するために、プロセスはANSIエスケープコードを標準出力に出力する必要がありますが、出力を16進ダンプすると表示できません。

$ kitty --version | xxd -g 1 -c 10 -u
00000000: 6B 69 74 74 79 20 30 2E 31 39  kitty 0.19
0000000a: 2E 31 20 63 72 65 61 74 65 64  .1 created
00000014: 20 62 79 20 4B 6F 76 69 64 20   by Kovid 
0000001e: 47 6F 79 61 6C 0A              Goyal.

私はここで少なくともいくつかのエスケープ文字と他のANSIシーケンスを見たかったのですが、そうではありません。これにより、kittyエスケープコードを処理できる端末に出力が表示されるかどうかを「予測」できると信じられました。

どうすればこれを行うことができますか?それともターミナルエミュレータの機能ですか?

答え1

読んman isattyだりhttps://linux.die.net/man/3/isatty

isatty - test whether a file descriptor refers to a terminal

関連情報