「\ 033]」で始まるエスケープシーケンスはどのタイプのシーケンスですか


18

Bashで多くのエスケープシーケンスが見つかりまし\033]たが、これらのシーケンスは何で、なぜ始まるの\033]ですか?

回答:


25

文字列は実際に\033[あり、それがすべてではありません。

その開始ブラケットの後には、一連の数字と記号が続きます。この文字列はエスケープシーケンスと呼ばれ、コンソールのカーソルやテキストの色などを制御するために使用されます。

非印刷エスケープシーケンスを囲む必要があります \[\033[ and \]

エスケープシーケンスがテキストの色を制御している場合、その後にが続きmます。

カラーシーケンスの表は次のとおりです。

Black       0;30     Dark Gray     1;30  
Blue        0;34     Light Blue    1;34  
Green       0;32     Light Green   1;32  
Cyan        0;36     Light Cyan    1;36  
Red         0;31     Light Red     1;31  
Purple      0;35     Light Purple  1;35  
Brown       0;33     Yellow        1;33  
Light Gray  0;37     White         1;37   

そのため、コンソールプロンプトを青にしたい場合は、次のエスケープシーケンスを使用します(忘れたファイル名で)。

\[\033[34m\]

(に注意してくださいm

ただし、このエスケープシーケンスは色を制御するだけではありません。カーソルの動きも制御できます。以下に、移動コードとその動作方法を示す表/リストを示します。

  • カーソルを配置します。

    \033[<L>;<C>H

    または

    \033[<L>;<C>f

    カーソルを行Lおよび列Cに置きます。

  • カーソルをN行上に移動します。

    \033[<N>A
  • カーソルをN行下に移動します。

    \033[<N>B
  • カーソルをN列前方に移動します。

    \033[<N>C
  • カーソルをN列後方に移動します。

    \033[<N>D
  • 画面をクリアし、(0,0)に移動します。

    \033[2J
  • 行末まで消去:

    \033[K
  • カーソル位置を保存:

    \033[s
  • カーソル位置を復元します。

    \033[u

最後の2つは、使用しているターミナルエミュレータでは動作しない可能性があることに注意してください。どうやら、これらの2つのシーケンスのみxtermnxterm使用します。

これらのエスケープシーケンスの1つを使用した例:行3、列(文字)9にカーソルを置きたいとします。そのために、

\[033\[3;9H]

(列0が最初の位置であると仮定しているため、8番目の文字になります)。

ソース:http : //www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html(6.2も参照

より一般的な読書:http : //ascii-table.com/ansi-escape-sequences.php

ウィキペディア:https : //en.wikipedia.org/wiki/ANSI_escape_code



2
'\ 033'は8進数のESCAPE文字であるため、10進数(27)または16進数(0x1B)で指定できることに注意してください。ESCAPEを記述する他の一般的な方法があります。たとえば、シェルスクリプトでは「^ [」、バインドキーでは「\ e」など
jamesqf

1
そのテーブルの多くのエントリは誤解を招くまたは不正確であることに注意してください。太字、かすかな、下線などは色とは無関係に設定およびリセットでき、色とともに0によってリセットされます。バックグラウンド用に別個のコードセット(40〜49)があり、代わりに7がフォアグラウンドとバックグラウンドを入れ替えます。ESC [2Kは、カーソルの前後の行全体を消去します。より良い情報源はウィキペディアの記事です。または、ECMA-48のセクション8.3.117 SGR – Select Graphic Renditionに直接アクセスできます。
deltab

語句「次の文章のそれぞれの末尾に『M』の文字がストップキャラクタとして使用されている」 cplusplus.comポストでもあるすぐ下の表は明らかで終了していないコマンドが含まれているため、混乱ビット「m」。実際、ここで一番上に表示すると、さらに誤解を招くように見えます。
-ilkkachu

1
技術的に0;は、カラーシーケンスの先頭は不要です。これにより、前景を設定する前に背景色がデフォルトになります。を使用して背景を設定することもでき4xます。
ファンドモニカの訴訟

17

これらは端末の制御コマンドです。

ターミナルは元々、シリアルポートに接続されたむしろ物の言えないデバイスであり、現在のメニューを備えた派手なマルチタブGUIソフトウェアではありません。文字(バイト)のストリームのみを受け取ったため、データ(画面に印刷するもの)とコマンド(印刷方法)の間に明確な分離はありませんでした。代わりに、コマンドは特別な制御文字で表されます。

明らかな制御文字は、ラインフィード(改行)、バックスペースESC、ベルビープのようなものですが、より具体的なコマンドは、文字で始まる文字のシーケンスとして与えられます(10進数のコード27、16進数の0x1b、または8進数の033)。多くの場合^[、またはの\033ように表されます。

シーケンスESC [はCSIまたはコントロールシーケンスイントロデューサーと呼ばれ、オプションの数値パラメーターを使用してコマンドを開始し、通常はメインコマンドを定義する文字で終わります。一般的なエスケープシーケンスのほとんどは、このクラスに分類されます。

エスケープコードのリストは、たとえばconsole_codes(4)manページや、ANSIエスケープコードの Wikipediaページにあります

いくつかの例:

ESC [ 4 A             move cursor 4 lines up (4 can be any number)
ESC [ 5 B             move cursor 5 lines down
ESC [ 2 K             erase current line 
ESC [ 30;46 m         set black text (30) on cyan background (46)
ESC [ 0 m             reset color and attributes

Bashなどを使用してコマンドをテストできます。-e組み込みechoコマンドは、フラグを使用して\033ESC文字の表現として受け入れます。

たとえば、これは、画面の中央に色で挨拶を印刷し、通常は元のカーソル位置に別の挨拶を印刷します。

echo -e '\033[s\033[12;30f\033[30;46m  Hello!  \033[0m\033[uhello'

ESC ]あなたが言及したシーケンスはOSCまたはオペレーティングシステムコマンドです。これは、主にウィンドウタイトルxtermなどを設定するコマンドで使用されます。

echo -e '\033]0;new window title\a'

それESC ( Aから、いくつかの端末に国別文字セットを設定する(および他の文字)があり、潜在的に陽気な効果があります。


8

エスケープとそれに続く右角括弧escape]は、オペレーティングシステムコマンドを導入するために使用されますOSC)。

これはECMA-48にあり、XTerm Control Sequencesでxtermが使用する制御シーケンスの要約を読むことができます。例えば、ターミナルウィンドウのタイトルを変更するために。

エスケープシーケンスは、異なる文字で開始できます。C1(8ビット)の制御文字 XTermの制御シーケンス内のセクションは、それらのいくつかを言及:CSI(あなたのように表示されescape[APCDCSPM。ペア(エスケープおよびので、異なる(第2)の文字の理由はある])が、Aと関連していますさまざまなタイプのエスケープシーケンスに使用されるシングルバイトの制御文字。

仕様CSIを読み通すと、数値パラメーターを持つコントロールに使用されていることに気付くでしょう。OSC文字列許可する。向こうはちょうど構文、この標準を作成した委員会は、のために心の用途に持っていたAPCPMは異なっているDCSOSC



1

他の回答で説明されている「エスケープシーケンス」は、使用している端末タイプ(ほとんどの場合「ANSI」または派生/類似のもの)に依存します。

$ echo $TERM  
xterm

端末の(多少)独立したスクリプトを作成したいが、それでも色やその他の特別な機能を使用する場合は、の内容をご覧くださいman terminfo

例えば

$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."

印刷します .test.test黄色がかった背景と赤い前景色でします。これは、同じ方法で色を実際に使用できるすべての端末で機能します。

実際に印刷される内容を確認するには、次のようにパイプしod -t x1zます。

$ tput sgr0 | od -t x1z  
0000000 1b 28 42 1b 5b 6d                                >.(B.[m<  
0000006

...値は16進数で表示されます(「x」のため)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.