Экран обрезает начало длинной команды при доступе через историю bash

9

Я использую стандартные версии bash и screen в OS X Lion.

Когда я нахожусь в сеансе экрана и прокручиваю назад историю bash, я прихожу к команде, которая достаточно длинна, чтобы ее перенести.

Я мог бы сначала набрать какую-нибудь команду:

selassid@tem02:~$ ls ljmix/fiftyfifty_softsphere/T0.350/r2.43/0.565421311859c0.1
83279836214c0.144847759343/

Это оборачивается правильно, как написано выше, но если я нажму вверх, чтобы получить доступ к нему через историю bash, консоль отобразит только:

83279836214c0.144847759343/

Поэтому подсказка и вся первая строка команды отсутствуют, что затрудняет редактирование; если я прокручиваю обратно до первой строки, она появляется, но перезаписывает последнюю строку вывода. Когда я выполняю команду, отображается остальная часть первой строки, и все выглядит так, как ожидалось:

selassid@tem02:~$ ls ljmix/fiftyfifty_softsphere/T0.350/r2.43/0.565421311859c0.1
83279836214c0.144847759343/
total 1792
...
selassid@tem02:~$ 

Что более любопытно, это то, что если использовать историю для доступа к длинной команде, но я еще не выполнил ее, то используйте любую C-aэкранную команду, например, переключение в другое окно и затем обратно, или если я щелкаю из моего текущего окна терминала и вернемся к нему, команда истории теперь снова отображается правильно.

Мои PS1='\u@\h:\w$ 'так что ничего странного происходит.

Есть ли способ правильно показать всю команду при использовании истории? Я пытался играть с настройками обтекания экрана, но они только ухудшают ситуацию.

stty -a шоу:

speed 9600 baud; 46 rows; 80 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
    -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
    -extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
    -ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
    -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
    eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
    min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
    stop = ^S; susp = ^Z; time = 0; werase = ^W;
selassid
источник
Можете ли вы сделать echo $ TERM, когда находитесь внутри экрана, и предоставить вывод? Также, если вы запустите tput am; echo $ ?, что вы получаете?
Патрик
TERMэто xterm-256colorи tput am; echo $?просто дает мне 0.
Selassid
Кроме того, это происходит только тогда, когда вы прокручиваете историю в нижней части окна, поэтому весь текст должен был бы переместиться вверх, чтобы показать вам вторую строку команды в вашей истории.
Селассид
Какой выход stty -a?
Энди Смит
Я добавил это внизу поста. Это соответствует тому, что выводится, когда экран не работает.
Селассид

Ответы:

1

Исходя из ответа на комментарий выше, кажется, что вы переопределяете TERM в одном из ваших сценариев запуска. Находясь внутри экрана, ваш TERM должен быть установлен на «экран», а не «xterm-256color».

Я бы посмотрел ваши сценарии запуска оболочки. ~ / .bashrc, / etc / bash / bashrc и, возможно, другие, такие как ~ / .bash_profile и / etc / profile, в зависимости от того, как у вас все настроено. Если вы видите какие-либо настройки TERM = "...", их необходимо удалить.

Патрик
источник
Это было правдой, но даже после их удаления и проверки того, что TERM является «экраном» внутри экрана, проблема не устраняется.
Selassid
У вас есть ~ / .inputrc или / etc / inputrc? Если это так, убедитесь, что режим горизонтальной прокрутки не установлен или что он выключен.
Патрик
У меня есть ~ / .inputrc, но режим горизонтальной прокрутки не установлен, и его отключение не меняет поведение. У меня есть input-meta и output-meta on и convert-meta off, но удаление этих настроек не меняет поведение.
Селассид