2013-07-16 6 views
25

時々、出力が自分の端末に壊れているようなコマンドラインツール(Pythonスクリプト)を実行する必要があります。 実行が終了すると、入力のフィードバックがなくなります(入力した内容が表示されません)。また改行も表示されません。これは、端末がPutty経由でリモートで開始され、gnome-terminalを使用してローカルで開始された場合に発生します。例えばLinux端末:入力のフィードバックがなくなり、改行が表示されない

問題が発生した後、私はをENTERpwdをENTER入力すると、私は見て期待:

[[email protected] ~]$ 
[[email protected] ~]$ pwd 
/home/userA 
[[email protected] ~]$ 

をしかし、実際に出力されます:

[[email protected] ~]$ [[email protected] ~]$ /home/userA 
                  [[email protected] ~]$ 

それを修正する唯一の方法は、その端末を閉じて新しい端末を起動することです。

関連性がある可能性があります:スクリプト出力には端末ベースの書式設定が含まれています(たとえば、フォアグラウンド/バックグラウンドを反転してステータスメッセージを強調表示するなど)。この出力をファイルにダンプすると、私は[07mSome Message Here[0mのようなものを見ることができます。

私はこれを防ぐために何ができるでしょうか?

+0

元の端末に戻るには、終了する必要があるサブシェルにいるようです。 exitを試してみてください; pwd –

+1

これはSOの話題です。 [unix.se]または[su]に属しています。つまり、あなたは通常、端末を 'sane '設定に戻す' stty sane'と入力することで、壊れた端末セッションを修正することができます。 –

+1

また、端末に問題がある場合は、 'reset'や' stty sane'を使って修正することもできます。 – cabad

答えて

59

「リセット」コマンドを実行し、お使いの端末が
参考に復元する必要があります受信エスケープコードが処理されているターミナル「STDOUT」にバイナリデータをダンプすると、この問題は、一般的に起こる


http://www.commandlinefu.com/commands/view/32/salvage-a-borked-terminalをテキストの色を変更したり、エコーを無効にしたり、文字セットを変更したりすることができます。

これを避ける簡単な方法は、未知のバイナリデータをターミナルにダンプしないようにし、ターミナルの設定を変更しないように16進数に変換する必要がある場合です。

+2

「リセット」、それは私が探していたものです。 。 –

+0

ありがとう!私のケースでは、Kubernetesコンテナの中でipythonを実行すると型付き入力が表示されず、 'reset'を実行して固定しました。 – dusan

+0

sshシェルの中で 'bash x.sh'を実行すると同じ問題が発生します。 'reset'が助けになりますが、.shファイルを再度実行すると、問題は再び現れます。 ご存知ですか? (.shファイルは基本的に 'sbt package'を実行して私のscalaプロジェクトを構築します) –