私は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
他のオプションを使用することもできます。vim
cat
less
同様に動作し、cat
ファイルの長さが1ページ未満の場合に自動的に終了するには、実行するかless -FX
doを実行します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」は、セミグラフィックモードで使用される文字ごとの翻訳文字列を提供します。