Як вирішити проблему з помилкою екрана терміналу? (як правило, після зміни розміру)


75

Іноді екран терміналу заплутується, і коли ми використовуємо man lsдля читання маніпуляцій або натискаємо стрілку Вгору, щоб перейти до попередніх команд історії, на екрані з'являться символи не як потрібне місце. (наприклад, ставляться до кінця екрана як до десь у середині екрана).

Команда resetпробується, і вона не працюватиме. Один із способів роботи - це вийти або закрити вікно, спершу змінити розмір вікна, а потім виконати ssh(або закрити цю вкладку, і змінити розмір вікна, а потім відкрити нову вкладку, щоб отримати нову оболонку).

Але таким чином ми втратимо все, що раніше робили, наприклад, запуск консолі віртуальної машини тощо. Отже, якщо ми не закриємо оболонку, чи є спосіб виправити цю проблему?

(це сталося раніше у Fedora, а також для Macbook sshу вікні RHEL 5.4).

Оновлення: зараз я пам’ятаю, як це сталося у Fedora: я відкрив термінал і зробив FreeVM для використання консолі віртуальної машини (оболонки). Я думаю, що він був розміром 80 х 25, а потім через деякий час я змінив розмір терміналу до 130 х 50 приблизно, і тоді "внутрішня оболонка" (від ВМ) почала поводитися дивно).


Який термінальний емулятор ви використовуєте? Звуки порушені, якщо resetце не вирішує проблему.
Йорданм

незалежно від програми Terminal всередині Fedora ... і програми терміналів за замовчуванням на Mac OS X Lion.
nopole

Перегляньте оновлення вище, як це сталося у Fedora
nopole

3
Чарівний заклик - ^Jreset^Jде ^Jозначає натискання ctrl-J. Або (на графічних терміналах) можна спробувати Resetкнопку. Крім того, деякі програми просто не готуються до зміни розмірів терміналів під ними (так, стародавнє програмне забезпечення живе і брикається) або просто погано поводяться, коли термінал стає занадто малим.
vonbrand

1
Мої проблеми були наслідком помилкового підрахунку довжини підказки, оскільки в ньому були кольорові коди; Мені не вистачало символів втечі \ [і \] - див. 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 все одно. Я думаю, що моя проблема стосується емуляції Windows (?) Під час ssh-ing на сервер Linux.
генеорама

Спочатку здавалося, що це не спрацювало, коли я використовував стрілки вгору для перегляду історії, але вже після першої виконаної команди він усе виправив. Використання термінатора в моєму випадку. Дякуємо +1
kstenger

це працює для мене, але тільки поворотом від checkwinsize. чомусь LINES = 24 встановлювався після кожної команди, хоча моє вікно (що містить сеанс пікокома) було набагато вище.
Майкл

19

Ви можете спробувати Ctrl+ L. Він очищає та / або перемальовує екран терміналу, залежно від програми.


3
але це не вирішує проблему назавжди ...
nopole

Я думаю, я мав на увазі: якщо натиснути CTRL L, то на даний момент рядок у порядку, але якщо ви знову відредагуєте рядок (або в наступному командному рядку, який ви вводите), проблема все ще є
nopole

11

додавання цих параметрів до dock exec, здавалося, вирішило мою проблему

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

1
ти був тим, хто поставив запитання 5 років тому?
Архемар

3
Я можу вам сказати, що його немає: "докер" не дуже відповідає "5 років тому". Докер ще не був звільнений у січні 2013 року ;-)
jplandrain

8

У мене була така ж проблема, і жоден із перерахованих вище рецептів не працював на мене, тому що я вважаю, що мій баш ніколи не отримує SIGWINCHсигналів, які потрапляють у його батьківський процес.

Нарешті я знайшов рішення. Я додав до свого .bashrc:

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

Тепер кожного разу, коли я отримую нове підказку, моє вікно змінюється знову.

Дякуємо UKmonkey за покращення PROMPT_COMMAND.


2
Я особисто пішов би з export PROMPT_COMMAND="resize &>/dev/null; $PROMPT_COMMAND"тим, щоб стара команда
підказок

Я б просто запустив розмір вручну в разі потреби. Допит консолі за розміром може бути повільним. Виконуючи це, кожна команда здається надмірною, і зазвичай ви знаєте, коли вона була змінена.
Конрад Мейєр

6

Я просто хотів додати те, про що Аркадієн вже згадував. Увімкнення checkwinsize робить трюк, але для мене потрібно було змінити розмір вікна, щоб воно нормально працювало. Я здогадуюсь, що контрольний розмір мав на меті усунути це, але все ж, варто зняти. Просто спробуйте змінити розмір вікна або скасувати максимізацію та максимізацію цього пункту.


1
Вірите чи ні, це було все, що потрібно, щоб виправити моє. Смішно, тому що я спробував усе інше спочатку.
таранакі

4

Я час від часу стикаюся з однією проблемою, використовуючи zsh на macOS. Простий виклик resetкоманди знову налаштовує термінал.


Тож ОП згадала, що resetне працює для них, і це насправді було питанням ....
Стівен Рауч

OP згадувала про це, не працюючи на Linux аромати. Я зіткнувся з проблемою на MacOS Sierra і resetпрацював у цій справі. Цю відповідь я додав, щоб допомогти всім, хто стикається з тією ж проблемою на MacOS і не знає про resetкоманду.
nonocut

resetпрацює на Windows Putty з Ubuntu 16.04!
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

Отже, кожен раз, коли я входжу в систему, розмір терміналу встановлюється відповідно розміром.


0

Ну, це загальна проблема, і повинно бути просте рішення.

Якщо інші заходи, такі як 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 Nі stty columns Nде N - "реальне" число (поза екраном). Приклад:$ stty rows 33; stty columns 133

Якщо ви використовуєте Terminator , ви можете пропустити перші три кроки, оскільки вгорі відображається кількість стовпців та рядків.

Вам не доведеться змінювати розмір вікон термінала, щоб уникнути цього. Адміністратори зазвичай входять з різних комп’ютерів, і коли додані монітори відрізняються за розміром (роздільною здатністю), вікно з максимальним збільшенням матиме різний розмір на кожному комп’ютері. Насправді досить важко не стикатися з цим часто.

І результат не лише в тому, що деякі чоловічі сторінки не відображаються належним чином. Практично все, що використовує пейджер - перші кілька рядків часто відсутні (наприклад). І навіть не думайте про те, щоб використовувати VIM в такому несогласованому терміналі. Ви хочете виділити рядок 3 (V), щоб замінити його, але коли ви це зробите, виділений текст є текстом іншого рядка.


0

Спробуйте stty sane. він повинен робити все, що вам потрібно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.