bash端末を一貫して停止する正しい方法は何ですか?

bash端末を一貫して停止する正しい方法は何ですか?

私はOSX 10.11.1を使用していますが、時々bash端末が破損することがあります。誤ってバイナリファイルを使用すると、catこれが頻繁に発生します。結果は以下の通りです。出力が奇妙になり、ASCII文字を入力できなくなりました。

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

時々これは起こりますが、問題を一貫して再現する方法を見つけることができません。オンライン検索ではこの方法を提案しましたが、cat /bin/*数十回試した後は時々動作しました。

私はこの問題を解決するための簡単な解決策を見つけるためにこれをしたいと思いますtmux

Bashを「壊れた」状態に保つにはどうすればよいですか?これを実行できる魔法のUnicode文字はありますか?

答え1

これは次のとおりですDEC特殊グラフィック文字セット

読書xterm制御シーケンス文書、端末がを受信するときにそれを使用しているようですESC ( 0

だからあなたは利用可能でなければなりません

printf '\033(0'

または

printf '\033(0' > corrupt-my-terminal
cat corrupt-my-terminal

そして再利用

printf '\033(B'

同じページに従って USASCII を選択します。


状態を復元する別の方法は次のとおりです。

tput sgr0  # resets all terminal attributes to their defaults

そして

reset      # reinitializes the terminal

tput sgr0(bash PROMPT_COMMAND)または(zsh)precmdで常に自動的にリセットされるようにすることができます。


または、ファイルを表示することに加えて、またはless他のオプションを使用することもできます。vimcat

less同様に動作し、catファイルの長さが1ページ未満の場合に自動的に終了するには、実行するかless -FXdoを実行しますexport LESS=-FX

または、これらのオプションを常に使用したくない場合は、less新しいエイリアスを作成してください。

alias c='less -FX'

答え2

VT100エミュレータでグラフィック文字セットが誤って選択される最も一般的な方法は、文字を受け取ることです(Control-N移動とも呼ばれます)。バイナリファイルをキャプチャし、その中に値が「\ 14」のバイトがある場合は、ターミナルエミュレータをグラフィック文字セットに変換できます。文字が受信またはControl-O移動されると(または端末の制御順序をリセットして)キャンセルされます。これは、bashやターミナルエミュレータで実行できる他のシェルとは無関係です。

ターミナルエミュレータ内で実行されるターミナルエミュレータの場合、セマンティクスは少し複雑になる可能性があります。たとえば、これです。画面受け入れる:

画面の端末エミュレーションは、端末呼び出し画面のtermcap項目にブール「G0」機能がある場合に複数の文字セットをサポートします。これにより、アプリケーションは VT100 グラフィック文字セットや国別文字セットなどを使用できます。 ISO 2022では、以下の制御機能をサポートしています:「ロックされたシフトG0」(「SI」)、「ロックされたシフトG1」(「SO」)、「ロックされたシフトG2」、「ロックされたシフトG3」、「シングルシフト位置G2」 、そして「シングルクラスG3」。仮想端末を作成またはリセットすると、ASCII文字セットは「G0」から「G3」まで指定されます。 「G0」機能がある場合、画面は「S0」、「E0」、「C0」(存在する場合)の機能を評価します。 「S0」は、「SI」ではなくグラフィックキャラクタセットを活性化して開始するために端末が使用するシーケンスである。 「E0」は「SO」を置き換えます。 「C0」は、セミグラフィックモードで使用される文字ごとの翻訳文字列を提供します。

答え3

同様の状況で、Bitvise SSHクライアントを使用しても端末が通常のディスプレイに復元されず、通常のディスプレイを復元するresetのにも役立ちませんでした。tput sgr0

0x0Eいくつかの調査の最後に問題のキャラクターを(SHIFT OUT)で見つけました。

ブラインドエコー0x0F()でSHIFT IN解決しました。

echo -e '\x0f'

関連情報