\033[999D
やなどのbashシーケンスに出くわし\033[2K\r
ました。これらは、端末の印刷出力を操作するために使用されます。しかし、これらのシーケンスはどういう意味ですか?これらのシーケンスの意味を知るのに役立つリスト/要約をウェブ上でどこで見つけることができますか?
\033[999D
やなどのbashシーケンスに出くわし\033[2K\r
ました。これらは、端末の印刷出力を操作するために使用されます。しかし、これらのシーケンスはどういう意味ですか?これらのシーケンスの意味を知るのに役立つリスト/要約をウェブ上でどこで見つけることができますか?
回答:
このリンクhttp://www.termsys.demon.co.uk/vtansi.htmを参照してください。Anthonが言うように、\033
エスケープ文字用のCスタイルの8進数コードです。[999D
カーソルを999列後方に移動します。これはおそらく、行の先頭に到達するためのブルートフォースの方法です。[2K
現在の行を消去します。\r
カーソルを現在の行の先頭に戻すキャリッジリターンであり、端末制御シーケンスではなく、Cスタイルのエスケープシーケンスです。
他の人が指摘しているように、これらの制御シーケンスはbash
それ自体ではなく、テキストが表示される端末デバイス/エミュレータです。昔々、これらのシーケンスは完全に異なるハードウェアによって解釈されることが一般的でした。もともと、それぞれがまったく異なるコードセットに応答していました。これに対処するにはtermcap
、terminfo
複数の端末と互換性のあるコードを記述するために使用されたライブラリとライブラリを使用します。このtput
コマンドはterminfo
ライブラリへのインターフェイスであり(termcap
サポートもコンパイルできます)、互換性のあるシーケンスを作成するためのより堅牢な方法です。
そうは言っても、ANSI X3.64またはECMA-48標準もあります。最新の端末実装ではこれが使用されます。terminfo
そしてtermcap
、実装が不完全であるか、または非標準の拡張機能を備えることができるようまだ関連している、しかし、ほとんどの目的のためには、一般的なANSI配列が動作することを仮定しても安全です。
xterm
FAQは近代的なターミナルエミュレータの違いについていくつかの興味深い情報を提供します(多くのちょうどエミュレートしようとxterm
自分自身を)とどのようにxterm
シーケンスは、上記のリンクに記載されたVT100端末に関連しています。また、xterm
制御シーケンスの決定的なリストも提供します。
また、Linuxコンソールももちろんよく使用されます。その制御シーケンスの決定的なリストはman console_codes
、との比較とともに、にありxterm
ます。
tput
代わりにコマンドを使用して、より移植性の高いiircを使用できます(ただし、端末の仕様の範囲が狭くなります)。VT100(ページが説明しているもの)は多くの人によってサポートされています(しかし、すべてがサポートされているわけではありません、私は信じています...)。しかし、あなたのTERM変数は、いくつかの他の端末に設定することができ、これは、コマンドの一部の効果に影響を及ぼす可能性
tput
がより堅牢な方法です。しかし、特定のVT100端末ではなくANSIの互換性が、今ではかなり遍在xterm
していますが、それらを受け入れないモードに設定することは可能だと思います。私はこれについてのさらなる情報で更新すると思います。
TERM=xterm
ていますが、すべてxterm
が実装されているわけではありません。
'\ 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'
「033 term escape list」または「033 tput」を検索して、誰かが答える前に詳細をhttp://wiki.bash-hackers.org/scripting/terminalcodesで確認できます ;]