Моя подсказка bash, которую я признаю, что она была украдена из нескольких мест и выложена вместе, иногда добавит часть предыдущих команд к ее длине при прокрутке истории bash с помощью стрелок вверх / вниз.
Например, если мои предыдущие команды были:
ls
cd /home/caleb
vim .bashrc
Когда я был в моем приглашении и прокручивал дважды, это могло выглядеть так:
$ vim .bcd / home / caleb
Где первые пять символов остались от последней команды.
У кого-нибудь есть идеи, почему это происходит и как это можно остановить?
Моя подсказка установлена с этим кодом (способ долго включать здесь): https://gist.github.com/1679352
Ответы:
Где-то ваша подсказка fubar. Обычно происходит то, что ваша оболочка думает, что она выводит непечатаемые термины-коды и ожидает, что она займет место. Лучший совет, который я могу вам дать, - это систематически добавлять (или убирать) ваше приглашение, пока это поведение не перестанет изолировать код, вызывающий эту проблему.
источник
Цветовые коды должны быть заключены в квадратные скобки. Скобки сообщают Bash, что прилагаемый текст не должен быть напечатан
основываясь на примере @ Phreditor, это показывает, что любое форматирование, выполненное после новой строки, приведет к исходной проблеме:
перенос кода формата в [] гарантирует, что раздражающее поведение никогда не произойдет:
Документация: http://tldp.org/HOWTO/Bash-Prompt-HOWTO/nonprintingchars.html
Поскольку форматирование PS1 приводит к тому, что значение становится таким длинным и трудным для чтения, я помещаю коды формата в переменные:
источник
\033
НЕ должны быть исключены. Избегать только квадратных скобок.У меня была такая же проблема, и она была связана с определениями цвета.
В моем случае у меня есть многострочная подсказка (дает большую часть места для текущей команды независимо от длины пути, отображаемой в подсказке).
Плохая версия:
Хорошая версия:
\033[00m
завершает цвет. Если это после новой строки (\n
), это предотвращает правильное перерисовывание в терминале, чтобы перезаписать предыдущие команды с цветом фона. Перемещение за новой чертой решило проблему.(используя терминал в Mac OS 10.8)
источник
\n
тоже был виновником для меня. Спасибо!Я на самом деле думаю, что это связано с отсутствующим разделителем непечатного символа. У меня была точно такая же проблема, но перемещение ее до новой строки (\ n) не устранило ее. Вместо этого я правильно окружил все непечатаемые символы (здесь, команды окраски) '\ [' и '\]'.
Плохо (работает, но имеет проблему с историей, описанную выше):
Хорошо (окружены все цветовые команды символами '\ [' и '\]' - не показывает историю запутанных команд):
И если вы помещаете это в что-то вроде SecureCRT для автоматической отправки при входе в систему, вам, возможно, придется дважды экранировать все (ставить двойные обратные слеши везде), если система автоматического входа использует сам первый обратный слеш для определения отправляемого символа :
(Это определенно верно для SecureCRT и может быть справедливо для других, таких как PuTTY или TeraTerm - тестирование требуется с вашей стороны.)
источник