回答:
文字列は実際に\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つのシーケンスのみxterm
をnxterm
使用します。
これらのエスケープシーケンスの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
0;
は、カラーシーケンスの先頭は不要です。これにより、前景を設定する前に背景色がデフォルトになります。を使用して背景を設定することもでき4x
ます。
これらは端末の制御コマンドです。
ターミナルは元々、シリアルポートに接続されたむしろ物の言えないデバイスであり、現在のメニューを備えた派手なマルチタブ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
コマンドは、フラグを使用して\033
、ESC
文字の表現として受け入れます。
たとえば、これは、画面の中央に色で挨拶を印刷し、通常は元のカーソル位置に別の挨拶を印刷します。
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
から、いくつかの端末に国別文字セットを設定する(および他の文字)があり、潜在的に陽気な効果があります。
エスケープとそれに続く右角括弧escape]
は、オペレーティングシステムコマンドを導入するために使用されます(OSC
)。
これはECMA-48にあり、XTerm Control Sequencesでxtermが使用する制御シーケンスの要約を読むことができます。例えば、ターミナルウィンドウのタイトルを変更するために。
エスケープシーケンスは、異なる文字で開始できます。C1(8ビット)の制御文字 XTermの制御シーケンス内のセクションは、それらのいくつかを言及:CSI
(あなたのように表示されescape[
、APC
、DCS
、PM
。ペア(エスケープおよびので、異なる(第2)の文字の理由はある]
)が、Aと関連していますさまざまなタイプのエスケープシーケンスに使用されるシングルバイトの制御文字。
仕様CSI
を読み通すと、数値パラメーターを持つコントロールに使用されていることに気付くでしょう。OSC
文字列許可する。向こうはちょうど構文、この標準を作成した委員会は、のために心の用途に持っていたAPC
とPM
は異なっているDCS
とOSC
。
これらはANSIエスケープコードと呼ばれ、console_codesのマニュアルページにリストされています。これらはBash固有ではありませんが、ターミナルがサポートしている限り、どのコンソールアプリケーションでも動作します(ほとんどのターミナルエミュレーターはサポートしています)。
他の回答で説明されている「エスケープシーケンス」は、使用している端末タイプ(ほとんどの場合「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」のため)。