出力をフォーマットするためにプログラムによってbashに送信される制御シーケンスを知りたいのですが。
たとえば、man less
をダンプすると、太字または下線付きの部分を識別できます。
DDEESSCCRRIIPPTTIIOONN
_L_e_s_s is a program similar to _m_o_r_e (1), but which allows backward move-
ment in the file as well as forward movement.
しかし、ls -G
の出力をファイルに送信すると、その色の形式に関するデータがありません。
Mac OSXを使用しています。
script /tmp/output
を使用して新しいシェルでの記録を開始し、コマンドを入力して/tmp/output
ファイルを調べます。エディターまたはcat -vet
を使用します。シェルにexit
と入力して、記録を終了します。
ほとんどのコアユーティリティは、インタラクティブ端末に出力するときの動作が異なります。ファイルまたはパイプに出力していることを検出した場合、フォーマットは行われません(当然のことながら、スクリプトを使用してファイルリストを処理するときにカラーエスケープシーケンスは必要ありません)。 ls
の場合、次のように強制できます。
CLICOLOR_FORCE=1 ls -G
(これはOSXの場合です。Linuxの場合はls --color=always
。)
他のツールにも同様のスイッチがあります(たとえば、grep
)。
おそらく、16進ビューアを介して出力を実行するのが最善です(例:od
、hexdump
、xxd
):
_% man less | hexdump -C | head -5
00000000 4c 45 53 53 28 31 29 20 20 20 20 20 20 20 20 20 |LESS(1) |
00000010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
*
00000040 20 20 20 20 20 20 20 4c 45 53 53 28 31 29 0a 0a | LESS(1)..|
00000050 0a 0a 4e 08 4e 41 08 41 4d 08 4d 45 08 45 0a 20 |..N.NA.AM.ME.E. |
%
_
その場合、ascii(7)
で印刷できない文字を検索できます。
「機能しない」というナンセンスについては、ls(1)
マニュアルをざっと見てみると次のようになります。
_% env TERM=xterm-color CLICOLOR_FORCE=1 ls -G | hexdump -C | head -3
00000000 1b 5b 33 34 6d 41 70 70 6c 69 63 61 74 69 6f 6e |.[34mApplication|
00000010 73 1b 5b 6d 1b 5b 6d 0a 1b 5b 33 34 6d 44 65 73 |s.[m.[m..[34mDes|
00000020 6b 74 6f 70 1b 5b 6d 1b 5b 6d 0a 1b 5b 33 34 6d |ktop.[m.[m..[34m|
%
_
Lsの場合は
export CLICOLOR_FORCE=X
ls -G | cat -vet
たぶん簡単です:
$ ls --color=always | od -cAn
十分になります。