Gnome 端末は制御文字 (\001-\x01 および \002-\x02) を正しく処理しません。

Gnome 端末は制御文字 (\001-\x01 および \002-\x02) を正しく処理しません。

新しい形式と正しいプラットフォームで同じ問題をやり直してください。

機械があります(別名をつけてください)ワドン)centos 7とbash 4.2を使用して、GNOME端末3.28.2、上記の制御文字の1つが見つかるたびに破損した文字を印刷します。コマンド入力:

echo -e "\x01\e[0;34mGoodDay\x01\e[0m\x02"

予想出力:

ここに画像の説明を入力してください。

この出力は、SSHを介してEddyに接続された他のシステムであるKonsole 2.10.5で印刷されます。

得られた出力(ワドン):

ここに画像の説明を入力してください。

ご覧のとおり、マシンは同じですが、出力は明らかに異なります。

私が試した文字は\x01 \x02(Hex)、\001 \002(Oct)、そして\[ \]最後の場合、角括弧は解釈されていないまま印刷されました。

ここに画像の説明を入力してください。

LANG変数などを確認しましたが、すべてがEddy自体がこれらの文書/標準の最新バージョンを持っていることを示すようです。

私は次の文字を追加しました(この質問によると:https://stackoverflow.com/a/19501528/21389760)、したがってプロンプト(read -pコマンドで使用されている場合)が正しくラップされ、印刷されない文字は画面上のスペースを占有しません。とにかく問題は次にのみ存在しますが、ワドン、オンラインで解決策が見つかりませんでした。

ベストアンサー1

これらの制御文字は端末にまったく印刷されず、Readlineライブラリで使用されます。今後ヒントの目的は、Readlineの幅を計算するのに役立ちますので、ヒントを表示します(正確にはヒントの幅を決定する必要があるため)いいえターミナル1の助けを借りて)。

readしたがって、「readlineを使用」オプションと一緒に使用する場合にのみ便利ですが-e、そうでない場合はプロンプトから省略する必要があります。

あなたが見ているのは、「印刷できない」文字を印刷するときのKonsoleとGNOME端末(または特にlibVTE)の間のやや正常な動作の違いです。それ以外の場合は、GNOME端末生成制御だけでなく、端末で定義された効果もありません。文字表示 - 他の端末でもこれを行うことができます。

シーケンスにも同様に適用されます\[ \]。まさにそこにあります。具体的にPS1またはPS2で使用されるBashの場合(実際にはReadlineライブラリにプロンプ​​ト文字列を提供する前と変換するだけ)、他の状況では意味がありません\x01\x02

1(端末はそのような助けを必要としません。なぜならはいレンダラーはすでに\e[...ラッピングシーケンスの役割とレイアウトに与える影響を理解しています。 )

おすすめ記事