通常、bashコマンドラインはラップされます。私は慣れていて、うまくいきます。
[cnd@MacBook-Pro ~]$ echo abcdefgABCDEFGhijklmnopHIJKLMNOPq
rsQRStuvTuvWXYZ
(デモンストレーションのためにウィンドウサイズを縮小しました)
ただし、既定の CentOS8 シェルではこれは行われません。代わりに、入力の先頭の大部分を切り捨てて(端末の幅の末尾から3文字以内に入ると)これを「">」に置き換えるので、入力した内容を見ることはできません。
[cnd@hpz ~]$
<EFGhijklmnopHIJKLMNOPqrsQRStuvTuvWXYZ
(実際のシェルウィンドウからコピー/貼り付け)
この迷惑な行動を止める正しい方法は何ですか?完全なコマンドを確認する必要があります。 (私は長いPerlステートメントをたくさん入力します。実行する前に確認することが重要です!)
vt100またはxtermを端末として使用し、いくつかの「set」コマンドや他のエクスポートを使用するなど、さまざまな操作を試しましたが、これまでは推測できませんでした。そうです。改行、不要なスクロール、ansiエスケーププロンプトエスケープなど)
答え1
これはGNU Readlineライン入力編集ライブラリの動作であり、Bourne Againシェルだけでなく、Readlineを使用するすべてのプログラムで表示されます。
termcap / terminfoデータベースのターミナルレコード(TERM
環境変数として表示)がカーソルを上に移動するターミナル機能を提供していない場合、Readlineは複数行モードで水平にスクロールする1行モードに置き換えられます(Kornシェル方式では独自の行編集ライブラリを使用します)。
実際、唯一のドキュメントは、ライブラリのソースコードに隠されたコメントです。
horizontal-scroll-mode
変数を on に設定して、Readline を強制的に 1 行モードに戻すこともできます。ただし、複数行モードを使用することを強制することはできません。とは別にフル機能の termcap/terminfo ロギングを提供します。
皮肉なことに、この代替措置は35年前にまれなターミナルとターミナルエミュレータにとって非常に重要でした。ラインプリンタとdumb
ターミナルは、そもそもこのタイプのライン入力編集には適していません。そしてほとんどすべて最新のビデオ端末には、カーソルを上に移動させる制御シーケンスがあります。
21世紀のより合理的なアプローチは、ECMA-48規格に基づくものです。 ECMA-48規格は1976年以来、1980年代半ばから広くサポートおよび開発されていますdumb
(実際には1968年TTY-37、glasstty
および参照)。デフォルトの。これは今日の入力ライン編集を行うことができますが、カーソルの上に移動制御シーケンスを持たない端末は言うまでもなく、真のTTY-37でさえほとんど会わないことを認識します。vanilla
tty37
GNU Readlineはまだこれを行いません。
追加読書
- https://unix.stackexchange.com/a/196229/5132
- ジョナサンデボインポラード(2019)。 」学期」。 いくつかの雑多な。 Nosh ツールセット。
- ジョナサンデボインポラード(2019)。 」端末機能」。 C++ライブラリ。 Nosh ツールセット。
- $ TERMはどのように、どこで解釈されますか?