新しい形式と正しいプラットフォームで同じ問題をやり直してください。
機械があります(別名をつけてください)ワドン)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[...
ラッピングシーケンスの役割とレイアウトに与える影響を理解しています。 )