web-dev-qa-db-ja.com

私のbashシェルはReturnで新しい行を開始せず、入力されたコマンドを表示しません

Lxterminalのウィンドウで実行しているインタラクティブbashシェルで、何を台無しにしたのかわかりません。

Returnキーを入力しても新しい行は始まりませんが、Ctrl-Cで始まります。

$ ^C
$ $ $ $ $ ^C
$ ^C
$ $ $ $ $ $ $ 

コマンドを入力すると、Returnキーを押しても実行されますが、入力したコマンドが表示されません。

それが起こる前に、私はいくつかのコマンドを実行していましたSudo lsof ... | less(またはSudo netstat ... | less)、そして何も出力されていないようだったので、ctrl-cやqを任意の順序で複数回ヒットしました。ようやくlessから抜け出したとき、bashに関するその問題が発生しました。

シェルのstdoutを誤って別の場所にリダイレクトしましたか?

シェルを閉じたくないので、問題を解決する方法はありますか?ありがとう。

6
Tim

端末が「おかしい」モードでスタックしている可能性があります。通常はncursesライブラリに付属している/usr/bin/resetコマンドでリセットできます。

14
user2233709

reset(別の回答で提案)が機能しない場合は、以下を試してください。

stty sane

多分続く

tput rs1

次のエイリアスを定義しました(stackoverflowのどこかで取得したと思います)。

alias   fixtty='reset; stty sane; tput rs1; clear; echo -e "\033c"'
10
Ralf

他の回答が示唆するように、最も簡単な修正はresetを実行することです。

原因についてはどうですか?これは通常、バイナリファイルまたはデータを端末にcat(または出力)したときに発生します。

テキストは単なるテキストであり、端末では特別に扱われませんが、テキストではない特殊な文字もいくつかあり、カーソルの移動、画面のクリア、色の変更、出力のエコーの停止などを行うために使用されます。

(テキストではなく)バイナリー・データを出力すると、端末はこれらの特殊な制御文字を認識し、通過するときにそれらを解釈しようとします。画面がクリア、点滅、またはジャンプすることに気づくかもしれません-これはすべて、これらのコントロールキャラクターが栄えているためです。新しいターミナルでhead /dev/urandomを実行して、私の意味を確認してみてください。

ほとんどの場合、端末がとにかく奇妙な動作をしている場合は、resetを実行するだけで、端末を基本的なデフォルトモードに設定するために必要なすべての特殊文字をエコーするだけで修正されます。 stop echoing inputコードとstart echoing inputコードがあります。バイナリデータには前者がランダムに含まれているため、入力内容を確認できません。また、resetには後者(他のものも含む)が含まれるため、修正されます。

6