web-dev-qa-db-ja.com

コマンドの生のフォーマット出力を取得するにはどうすればよいですか?

出力をフォーマットするためにプログラムによって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を使用しています。

3
1.61803

script /tmp/outputを使用して新しいシェルでの記録を開始し、コマンドを入力して/tmp/outputファイルを調べます。エディターまたはcat -vetを使用します。シェルにexitと入力して、記録を終了します。

4
meuh

ほとんどのコアユーティリティは、インタラクティブ端末に出力するときの動作が異なります。ファイルまたはパイプに出力していることを検出した場合、フォーマットは行われません(当然のことながら、スクリプトを使用してファイルリストを処理するときにカラーエスケープシーケンスは必要ありません)。 lsの場合、次のように強制できます。

CLICOLOR_FORCE=1 ls -G

(これはOSXの場合です。Linuxの場合はls --color=always。)

他のツールにも同様のスイッチがあります(たとえば、grep)。

3
orion

おそらく、16進ビューアを介して出力を実行するのが最善です(例:odhexdumpxxd):

_% 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|
% 
_
3
thrig

Lsの場合は

export CLICOLOR_FORCE=X
ls -G | cat -vet
3
fd0

たぶん簡単です:

 $ ls --color=always  |  od -cAn

十分になります。

0
user79743