時々、コマンドラインツール(a Python script)を実行する必要があります。この出力により、端末が壊れているようです。実行が終了すると、入力フィードバックがなくなります(できます)これは、端末がPuTTY
を介してリモートで起動された場合、およびgnome-terminal
を使用している場合はローカルで起動された場合に発生します。
たとえば、問題が発生した後、次のように入力すると ENTER pwd
ENTER、私は見ると期待しています:
[userA@Host006 ~]$
[userA@Host006 ~]$ pwd
/home/userA
[userA@Host006 ~]$
しかし、実際の出力は次のとおりです。
[userA@Host006 ~]$ [userA@Host006 ~]$ /home/userA
[userA@Host006 ~]$
それを修正する唯一の方法は、その端末を閉じて新しい端末を起動することです。
関連する可能性があります:スクリプト出力には、端末ベースの書式設定が含まれています(たとえば、フォアグラウンド/バックグラウンドを反転して、いくつかのステータスメッセージを強調表示します)。この出力をファイルにダンプすると、[07mSome Message Here[0m
などが表示されます。
これを防ぐために私ができることはありますか?
コマンドreset
を実行すると、ターミナルが復元されます( reference )。
この問題は一般に、バイナリデータを端末にダンプするときに発生しますSTDOUT
。受信したエスケープコードが処理されると、テキストの色の変更、エコーの無効化、文字セットの変更まで何でもできます。
これを回避する簡単な方法は、不明なバイナリデータを端末にダンプしないようにし、それを16進数に変換して端末の設定を変更しないようにすることです。
Joshua Briefman's answer を詳しく説明するには、reset -c
は、問題の原因となった制御文字のみをリセットします。
tset
、reset
-端末の初期化
Usage: tset [options] [terminal]
Options:
-c set control characters
-e ch erase character
-I no initialization strings
-i ch interrupt character
-k ch kill character
-m mapping map identifier to type
-Q do not output control key settings
-r display term on stderr
-s output TERM set command
-V print curses-version
-w set window-size
また、コマンドの manual の次の形式に注意してください。
注、入力する必要がある場合があります
<LF>reset<LF>
(改行文字は通常control-Jです)端末を動作させるには、キャリッジリターンが異常な状態で動作しなくなる可能性があります。また、端末はしばしばコマンドをエコーしません。