bashシーケンス '\ 033 [999D'は何を意味し、どこで説明されていますか?


19

\033[999Dやなどのbashシーケンスに出くわし\033[2K\rました。これらは、端末の印刷出力を操作するために使用されます。しかし、これらのシーケンスはどういう意味ですか?これらのシーケンスの意味を知るのに役立つリスト/要約をウェブ上でどこで見つけることができますか?


3
これらは、bashシーケンスではなく、末端シーケンスです。端末のドキュメントを見て、その機能を判断する必要があります。
クリスダウン14

1
これらのシーケンスは、出力の色付けに役立ちます。チェック: stackoverflow.com/questions/16845699/...stackoverflow.com/questions/5947742/...
adizere

1
@adizereは、すべてのエスケープシーケンスが色の変更を行うわけではありません。このQのシーケンスは、色ではなく、行の操作とカーソルの移動用です。
ケーシー14

回答:


32

このリンクhttp://www.termsys.demon.co.uk/vtansi.htmを参照してください。Anthonが言うように、\033 エスケープ文字用のCスタイルの8進数コードです。[999Dカーソルを999列後方に移動します。これはおそらく、行の先頭に到達するためのブルートフォースの方法です。[2K現在の行を消去します。\rカーソルを現在の行の先頭に戻すキャリッジリターンであり、端末制御シーケンスではなく、Cスタイルのエスケープシーケンスです。

更新

他の人が指摘しているように、これらの制御シーケンスはbashそれ自体ではなく、テキストが表示される端末デバイス/エミュレータです。昔々、これらのシーケンスは完全に異なるハードウェアによって解釈されることが一般的でした。もともと、それぞれがまったく異なるコードセットに応答していました。これに対処するにはtermcapterminfo複数の端末と互換性のあるコードを記述するために使用されたライブラリとライブラリを使用します。このtputコマンドはterminfoライブラリへのインターフェイスであり(termcapサポートもコンパイルできます)、互換性のあるシーケンスを作成するためのより堅牢な方法です。

そうは言っても、ANSI X3.64またはECMA-48標準もあります。最新の端末実装ではこれが使用されます。terminfoそしてtermcap、実装が不完全であるか、または非標準の拡張機能を備えることができるようまだ関連している、しかし、ほとんどの目的のためには、一般的なANSI配列が動作することを仮定しても安全です。

xterm FAQは近代的なターミナルエミュレータの違いについていくつかの興味深い情報を提供します(多くのちょうどエミュレートしようとxterm自分自身を)とどのようにxtermシーケンスは、上記のリンクに記載されたVT100端末に関連しています。またxterm制御シーケンスの決定的なリストも提供します

また、Linuxコンソールももちろんよく使用されます。その制御シーケンスの決定的なリストはman console_codes、との比較とともに、にありxtermます。


含めたリンクは、私が探していたページです。
アレックス14

@Alex Glad私はそれを自分で見つけました。私が見たほとんどのページはカバーカラーのみで、どういうわけか読むのが本当に複雑です。これにより、すてきでシンプルなレイアウトになります。
グレアム14

エスケープコードの動作は端末のタイプに依存することに注意してください(また、最新の画面/ OSでいくつかのタイプの端末をエミュレートできます)。tput代わりにコマンドを使用して、より移植性の高いiircを使用できます(ただし、端末の仕様の範囲が狭くなります)。VT100(ページが説明しているもの)は多くの人によってサポートされています(しかし、すべてがサポートされているわけではありません、私は信じています...)。しかし、あなたのTERM変数は、いくつかの他の端末に設定することができ、これは、コマンドの一部の効果に影響を及ぼす可能性
オリヴィエ・デュラック

@Olivier、正しい方tputがより堅牢な方法です。しかし、特定のVT100端末ではなくANSIの互換性が、今ではかなり遍在xtermしていますが、それらを受け入れないモードに設定することは可能だと思います。私はこれについてのさらなる情報で更新すると思います。
グレアム14

@Olivier多くの端末エミュレーターも設定されTERM=xtermていますが、すべてxtermが実装されているわけではありません。
グレアム14

5

\033エスケープ文字であり、それらの配列は、bashの特定ではなく、端末(ネットワークまたはシリアル回線を介してソフトウェアまたはハードウェア())によって解釈(bashの)プログラムが実行されています。多くのそのようなシーケンスがあります

それぞれが行うことは、依存している端末に依存し、端末の状態を変更する以前のシーケンスにも依存する場合があります。

これらはbashプロンプトを設定するためによく使用されますが、そのページでは特定の例を見つけられませんでした。


3

'\ 033 [999D'は面白いです。一部の端末は少数のエスケープシーケンスを実装しているため、 '\ 033 [1G'、 '\ 033 [1; 1H'、 '\ 033 [1; 1f'、または '\ r'のいずれも動作しない場合にこれが必要になることがあります。しかし、だれが1000列のテキスト表示を使用しますか?これらのシーケンスには、Linuxのmanページ:console_codes(4)があります。bjh21には、すべてのコードの詳細なリストがあります。どのプログラムが '\ 033'を解析するかによって、より明確な置換 '\ e'が利用可能になる場合があります。

これらを直接使用することは実際には意図されていません(端末制御コマンドを発行する正しい方法は、ncursesなどの抽象化レイヤーを使用することです)が、文字列リテラルからも同様に機能します。


良い点、私\033[999Dはそれが前の行をバックアップすると仮定しました。ちょうどかかわらず、コーディング怪しいの結果である可能性がある。)また、取得することができますbash例えば、直接エスケープコードを解釈するために$'\033[999D'
グレアム・

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