LINUX.ORG.RU

Bash и сломанная история команд

 


0

2

GNU bash, версия 5.0.3(1), повторяется уже не на первой машине в lxterminal, xterm, sakura. Довольно неудобно пользоваться историей команд, когда при перелистывании строка в каком-то месте ломается, видимо, на каком-то определённом наборе символов, проследить не могу. Чаще всего после длинных команд, не вместившихся в ширину окна терминала.

скрин

~$ make -j3 image PROFILE=...
~$ make -j3 imc
~$ make -j3 imake -j3 image PROFILE=...

Как гуглить-то эти артефакты? Может у меня что-нибудь с конфигами не так?

Это ошибка в bash; я рассказал о ней разработчикам около полутора лет назад, и она должна быть уже исправлена в bash 5.1.

Есть возможность обойти ошибку, изменив PS1 и убрав оттуда последовательность, устанавливающую заголовок терминала по протоколу xterm. Приведите своё приглашение, и я подскажу, что убрать.

Rootlexx ★★ ()

Проблему отрицать не собираюсь, но прокомментирую. Подобных багов с порчей поведения после не влезающих строк - много не только в баше, везде фиксить замучаешься, в целом проще избегать таких ситуаций.

Ну и историю листать стрелками дальше чем на 5-10 команд систематически - тот ещё мазохизм. Если надо просто найти в ней что-то, то проще набрать команду history, или history | grep, или history | less (тогда, в современных терминалах, после выхода из less экран останется в чистом виде). Если пролистывание команд - часть рабочего процесса, то вполне вероятно его можно как-то оптимизировать, например заскриптовав повторяющиеся действия.

firkax ()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Ну и историю листать стрелками дальше чем на 5-10 команд систематически - тот ещё мазохизм. Если надо просто найти в ней что-то, то проще набрать команду history, или history | grep, или history | less

OMG, зачем, если есть Ctrl-R?

Rootlexx ★★ ()
Ответ на: комментарий от Rootlexx

А когда она начала проявляться, точно известно?

В .bash_profile

export PS1="\e[0;36m\u@\h \W$ \e[m"

Ну это слегка для другого цвета, чем на скрине.

Опаньки, а без кастомизированной PS1 не наблюдаю такого. Спасибо, помогло.

const92 ()
Ответ на: комментарий от Dog

5.1.4 ничего не исправлено

Хм. См. https://lists.gnu.org/archive/html/bug-bash/2019-11/msg00100.html — если действительно баг всё ещё присутствует, то стоит написать в рассылку.

Подскажи, пожалуйста, что значит заголовок терминала по протоколу xterm?

См. https://tldp.org/HOWTO/Xterm-Title-3.html#ss3.1

Rootlexx ★★ ()
Ответ на: комментарий от Rootlexx

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

Я правильно понял, что в моем примере PS1 нужно убрать только раскрашивание?

Dog ()
Ответ на: комментарий от const92

Оно и есть в непосредственной доступности: history | less. По-моему куда более удобный вид чем листать стрелками по одной команде и без указания сколько ты уже пролистал/сколько осталось. И при этом без багов с длиной строк (хотя у less они тоже есть, но к счастью не в этом случае).

firkax ()
Ответ на: комментарий от Rootlexx

Нажал Ctrl-R, открылся какой-то поиск. Ну, может оттуда и можно как-то less по истории запустить (хотя я сходу не понял как там сделать что-то кроме поиска одной команды по подстроке), если так то можно Ctrl-R, иначе же оно хуже.

Не говоря уж о том что history | less работает и в csh например (то есть не надо запоминать свой рецепт под каждый шелл), а Ctrl-R это bash.

firkax ()
Последнее исправление: firkax (всего исправлений: 2)