端末を再初期化するには、単純な reset
これを修正します。詳細とオプションについては、man reset
このAskUbuntuの質問に対する@James Henstridgeの回答は、端末が「カーソルアドレス指定」モードでスタックしているため、エラーを正しく識別しているようです.
彼の最初の解決策、コマンド $ tput rmcup
、動作しますが、説明の方法はあまりありません。それで、私はそれを理解しようとしました.
man tput
tput
ユーティリティは terminfo
を使用します データベースを使用して、端末に依存する機能の値と情報をシェルで使用できるようにし (sh(1) を参照)、端末を初期化またはリセットするか、要求された端末タイプの長い名前を返します。
terminfo
また、あまり有用な文書化もされていません。私が見つけることができる最も包括的な情報源は、tldp.org の記事です。明らかに terminfo
さまざまな端末と、それらが持つコマンドと機能のデータベースです。おそらく、すべての Linux インストールに 1 つあるのでしょうか?では、異なる端末を使用できますか?
man terminfo
そのファイルが /etc/terminfo/*/*
にあることを示します 、しかしUbuntu 16.04では、そこにREADMEしか見つかりませんでした。実際のファイルは /lib/terminfo/*/*
にあります;例えば/lib/terminfo/l/linux
、おそらくほとんどの読者にとって最も関連性の高いファイルはどれですか?これらのファイルは人間が判読できないため、わかりません。上記にリンクされた tldp.org の記事には、infocmp
と記載されています。 ソースを表示するために使用できますが、そうではありません:
$ infocmp /lib/terminfo/l/linux
infocmp: couldn't open terminfo file /lib/terminfo/l/linux.
この記事では、ソース コード ファイル /etc/termcap
についても言及しています。 と /etc/terminfo.src
、しかしこれらはUbuntu 16.04には存在しません。 /usr/share/vte/termcap*/
のセットを見つけました 人間が読める xterm
を含むディレクトリ ファイル。これはすべて、私が使用しているデフォルトの Ubuntu である GNOME ターミナルに接続されていると推測する必要がありますが、その方法を理解するのにうんざりしています.
man
terminfo
のページ ただし、もう1つ役立つメモがあります。その「事前定義された機能」の下に「変数文字列」があります exit_ca_mode
'capname' ("機能名" だと思います) rmcup
説明 strings to end programs using cup
付き .説明はあまり役に立ちませんが、変数名は次のとおりです。これは、端末がスタックしている「カーソル アドレッシング モード」を終了する端末の機能を参照する必要があります。
つまり、$ tput rmcup
tput
を使用する必要があります terminfo
にアクセスするには データベースを開き、現在の端末の exit_ca_mode
を有効にします 能力 rmcup
、カーソルのアドレス指定モードを強制終了し、端末を通常のスクロール動作に戻します。