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=...

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



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

Это ошибка в 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

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

Моя PS1 - \e[0;32m\u@\h \w \$

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

5-10 команд

Иной раз достаточно 1-2 для появления бага. Если надо просто перезапустить команду, то еще ладно, а если надо подредактировать? Я уже на ощупь блин научился

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

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

В .bash_profile

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

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

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

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

дальше чем на 5-10 команд

history это твой дневник линуксоида, как по мне - лучше это всё иметь в непосредственной доступности. Да и пролистать - лучшее, что может сделать скрипт.

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 ★★★★★
()
Ответ на: комментарий от const92

Escape-последовательности надо обрамлять \[ и \], чтобы bash пропускал их при расчёте длины приглашения:

export PS1="\[\e[0;36m\]\u@\h \W$ \[\e[m\]"
xaizek ★★★★★
()
Ответ на: комментарий от Rootlexx

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

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

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

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

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

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

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

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

Так тоже работает, спасибо. Вроде ринулся всё раскрашивать, а получился бездумный копипаст.

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

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

deep-purple ★★★★★
()
Ответ на: комментарий от anonymous

Спасибо. Как раз хотел что-то такое.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.