У меня проблема с рисованием линий консоли. Проблема в том, что когда я подключаюсь к серверу через ssh, все работает нормально. Но когда я использую клавишу со стрелкой вверх для отображения последних использованных команд, после нее часто остается несколько символов. $
подпишите как (жирным шрифтом выделено то, что остается после подсказки):
user@host:/var/www_vhosts/instalator-paczek$ cp -r instnano /etc/issue
Еще больше раздражает то, что происходит, когда я набираю больше символов, чем ширина консоли. Курсор каким-то образом возвращается в начало строки и перезаписывает подсказку:
/ d / asd / как / d / asd / asd / как / d / asd / asdww_vhosts/instalator-paczek$ ls -la asdkasdasdasd/asdasdasd/asdasdasdasdasdas/dasdsdaas/d/asd/as/d/asd/as
Я не могу использовать длинные команды, потому что они перезаписывают начало, и я не вижу, правильно ли я набрал все. Длинная команда, вставленная в консоль, работает, даже если дисплей поврежден. Это похоже на то, что поврежден только дисплей, но сама команда в порядке.
У меня Ubuntu 12.10, и я использую Konsole
как терминальное приложение. На сервере есть Debian GNU Linux 6.0
Это происходит только с этим сервером, с другими серверами, которые я подключаю, хорошо работает Konsole
. Мои коллеги используют putty
для подключения к тому же серверу, и у них также есть такая же проблема. Похоже, проблема связана с сервером, а не с терминальной программой.
На сервере нет xterm
пакет, поэтому я боролся, чтобы он установил его, чтобы решить проблему. Но даже после того, как я установил этот пакет, существует такая же проблема. Стоит ли перезапускать сервер после установки xterm
? Я предпочитаю этого не делать, потому что я не администратор сервера.
Мне нужно добавить, что, похоже, изменение размера окна консоли также меняется stty
на сервере:
user@host:~$ stty -a
speed 38400 baud; rows 57; columns 151; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
user@host:~$ stty -a
speed 38400 baud; rows 57; columns 172; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
Я уже пробовал решения, в том числе с использованием resize
и reset
команды, но они не помогли.
Как это исправить?
Я задал такой же вопрос о Unix и Linux но решения не найдено, поэтому пишу здесь.
Хорошо, наконец, я нашел решение. Проблема заключалась в том, что $PS1
не было цветовых последовательностей, заключенных в \[
и \]
. Перед исправлением $PS1
был:
export PS1='\e[1;32m\u@\h:\w$ \e[m'
после исправления:
export PS1='\[\e[1;32m\]\u@\h:\w$ \[\e[m\]'
Я нашел здесь решение: https://stackoverflow.com/questions/2024884/commandline-overwrites-itself-when-the-commands-get-to-long
Здесь есть несколько проблем. Проблема со стрелками вверх и вниз обычно возникает из-за несоответствия типов терминов.
У меня случается ошибка переноса, обычно это происходит из-за того, что вы изменили размер экрана. От «80x24» до «151x57». Иногда удаление СТРОК и СТРОК может решить проблему, используйте
unset LINES
unset ROWS
а затем посмотрите, исчезнет ли проблема. Есть команда (я думаю, что stty тоже может это сделать), которая сбросит ваш терминал после того, как вы измените его размер, чтобы bash не волновался, но мне придется поискать ее.