ターミナル画面がめちゃくちゃになるという問題を解決するにはどうすればよいですか?(通常、サイズ変更後)


76

端末画面がめちゃくちゃになっていて、man lsマンページを読んだり、上矢印を押して履歴の前のコマンドに移動したりすると、画面に文字が正しく表示されないことがあります。(たとえば、画面の終わりを画面の中央にあるものとして扱います)。

コマンドresetが試行され、機能しません。動作する方法の1つは、ログアウトまたはウィンドウを閉じて、最初にウィンドウのサイズを変更してからssh(またはそのタブを閉じてウィンドウのサイズを変更し、新しいタブを開いて新しいシェルを取得する)です。

ただし、この方法では、仮想マシンコンソールの起動など、以前に行ったことはすべて失われます。シェルを閉じない場合、この問題を解決する方法はありますか?

(これはFedoraのすぐ前で発生し、Macbook sshをRHEL 5.4ボックスに入れるためにも発生しました)。

更新: Fedoraでどのように起こったか覚えています。ターミナルを開き、FreeVMを実行して仮想マシン(シェル)のコンソールを使用しました。サイズは80 x 25だったと思いますが、しばらくすると、ターミナルのサイズを約130 x 50に変更し、(VMの)「内部シェル」がおかしくなり始めました)。


どの端末エミュレータを使用していますか?reset問題が解決しない場合、音が壊れます。
ヨルダン

Fedora内のあらゆるターミナルプログラム...およびMac OS X Lionのデフォルトのターミナルプログラム。
-nopole

Fedoraでどのように発生したかについては、上記の更新を参照してください
-nopole

3
魔法の呪文は^Jreset^J^J押すことを意味しctrl-Jます。または(グラフィカル端末では)Resetボタンを試すことができます。また、一部のプログラムは、その下で端末のサイズを変更する準備ができていない(そう、古代のソフトウェアは生きており、キックしている)か、端末が小さくなりすぎた場合に不正な動作をします。
フォンブランド

1
私の問題は、bashに色コードが含まれていたため、プロンプトの長さを誤って計算することに起因していました。私はエスケープ文字\ [と\]がありませんでした-unix.stackexchange.com/questions/105958/を
qneill

回答:


93

bashを使用している場合は、セッションで「checkwinsize」オプションがアクティブになっているかどうかを確認してください。

shopt | grep checkwinsize

取得しない場合

checkwinsize    on

次にそれをアクティブにします

shopt -s checkwinsize

Bashのドキュメントには、「checkwinsize」属性について記載されています。

「設定されている場合、Bashは各コマンドの後にウィンドウサイズをチェックし、必要に応じてLINESおよびCOLUMNSの値を更新します。」

設定が気に入ったら、で有効化できcheckwinsizeます~/.bashrc

  • 有効にするために: shopt -s checkwinsize
  • 無効化するには: shopt -u checkwinsize

6
これは私の問題を解決するために起こりませんが、これは良い一般的な答えなので、とにかく+1。私の問題は、LinuxサーバーにsshするときのWindowsエミュレーション(?)に関連すると思います。
ジェネラマ

最初は、矢印を使用して履歴を表示したときに機能しなかったように見えましたが、最初に実行されたコマンドの直後にすべてを修正しました。私の場合はターミネーターを使用しています。ありがとう+1
kstenger

これは私にとってはうまくいきましたが、checkwinsizeをオフにするだけでした。何らかの理由で、ウィンドウ(ピココムセッションを含む)がはるかに高いにもかかわらず、各コマンドの後にLINES = 24が設定されていました。
マイケル

19

Ctrl+ を試すことができLます。プログラムに応じて、端末画面をクリアまたは再描画します。


3
しかし、それは問題を永久に解決しません
...-nopole

私はあなたがCTRL Lを押すと、その行は一瞬のためにOKですが、あなたは再び行を編集している場合(または、あなたが入力し、次のコマンドラインで)、その後、問題はまだそこにある、だった意味を考える
nopole

11

これらのオプションをdocker execに追加すると、私の問題が解決したようです

-e COLUMNS=$COLUMNS -e LINES=$LINES -e TERM=$TERM

1
5年前に質問したのはあなたですか?
アーケマー

3
私は彼がそうではないと言うことができます:「ドッカー」は「5年前」とは本当に合わない。Dockerは2013年1月にはまだリリースされていません;-)
jplandrain

8

私は同じ問題を抱えていましたが、bashはSIGWINCH親プロセスによってトラップされたシグナルを受信しないと信じているため、上記のレシピはどれも役に立ちませんでした。

私は最終的に解決策を見つけました。私に追加しました.bashrc

export PROMPT_COMMAND="resize &>/dev/null ; $PROMPT_COMMAND"

これで、新しいプロンプトが表示されるたびに、ウィンドウが再調整されます。

PROMPT_COMMANDを改善してくれたUKmonkeyに感謝します。


2
個人的にはexport PROMPT_COMMAND="resize &>/dev/null; $PROMPT_COMMAND"、古いプロンプトコマンドが保存されるようになります
-UKMonkey

必要に応じて手動でサイズ変更を実行します。コンソールのサイズの問い合わせは遅くなる場合があります。それをすべてのコマンドで行うことは過度に思え、通常はサイズ変更のタイミングを知っています。
コンラッドマイヤー

6

Arcadienがすでに言及したことを追加したかっただけです。checkwinsizeを有効にすることでうまくいきますが、私にとっては、ウィンドウのサイズをリセットして適切に機能させる必要がありました。checkwinsizeはこれをなくすためのものでしたが、それでも一見の価値があります。このオプションの後で、ウィンドウのサイズを変更するか、ウィンドウの最大化と最大化解除を試してください。


1
信じられないかもしれませんが、これが私の修正に必要なすべてでした。面白いのは、他のすべてを最初に試したからです。
タラナキ

4

macOSでzshを使用すると、時々同じ問題に直面します。resetコマンドを簡単に呼び出すと、端末が再び私の好みに設定されます。


だから、OPはその言及したreset彼らのために働いていなかったが、これは....実際には、質問のポイントだった
スティーブン・ラウフ

OPは、Linuxフレーバーで動作しないことについて言及しています。私はMacOS Sierraで問題に直面し、resetこのケースで働きました。この回答を追加して、MacOSで同じ問題に直面し、resetコマンドを知らない人を助けます。
ノーカット

resetUbuntu 16.04を搭載したWindows Puttyで動作します!
-musbach

ubuntu 16.04 zshでリセットが機能した
A.Wan

2

私はあなたと同じ問題を抱えていました。これは私がやったことです。ユーザーにセットアップ
がある.profileので、そこですべての変更を行います。

呼ばれるパッケージがありxtermを通じて提供されていますapt-get、私は知りませんがyum。しかし、インストール権限がないため、ソースからローカルインストールを行いました。リンク:http : //invisible-island.net/xterm/#download

./configure --prefix=/the/path/you/want/to/install/to
make
make install

プロファイル内のパスをエクスポートし、同じ場所で呼び出しました

export PATH=$PATH:/the/path/you/want/to/install/to
resize

そのため、今度はログインするたびに、端末サイズがサイズ変更に応じて設定されます。


1

まあ、それは一般的な問題であり、簡単な解決策があるはずです。

Ctrl + A Ctrl + Lなどの他の手段が機能しない場合は、次を使用してみてくださいstty

  1. Ctrl + T:ローカルシェルで新しいタブを開きます。
    または:画面を離れ(Ctrl + ADでデタッチ)、SSHセッションからログアウトします。
  2. stty -a | grep rows:行と列の数を取得します。
    例:speed 38400 baud; rows 33; columns 133; line = 0;
  3. リモートタブに戻るか、ログインして画面を再接続します。stty出力は異なっている必要があります。
    例:speed 38400 baud; rows 47; columns 177; line = 0;
  4. 入力stty rows Nstty columns NNは「実際の」番号(画面の外側)です。例:$ stty rows 33; stty columns 133

Terminatorを使用する場合、列と行の数が上部に表示されるため、最初の3つのステップをスキップできます。

これを実行するために、ターミナルウィンドウのサイズを変更する必要はありません。通常、管理者は異なるコンピューターからログインし、接続されているモニターのサイズ(解像度)が異なる場合、最大化されたウィンドウのサイズはコンピューターごとに異なります。これに頻繁に遭遇しないこと実際にはかなり難しいです。

そして、結果は、一部のマニュアルページが適切に表示されないということだけではありません。ページャーを使用するものはほとんど何でも-最初の数行が欠落していることがよくあります(たとえば)。そして、そのような不整合な端末でVIMを使用することさえ考えないでください。置換するために3行目(V)を強調表示しますが、変更すると、強調表示されたテキストは別の行のテキストになります。


CentOSにはサイズ変更がないようです。「stty rows 66」を使用してトリックを行います。
ラス

0

試してくださいstty sane。必要なことを行う必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.