Я пытаюсь сделать PS1 настроенным следующим образом.
Зеленый = "\ [\ е [32; 1м \]" Красный = "\ е [0; 31m" Фиолетовый = "\ е [0; 35m" STARTCOLOR = "\ [\ е [40m \]" ENDCOLOR = "\ [\ е [0м \]" export PS1 = "$ STARTCOLOR $ Green \ u @ $ Purple \ h $ Red \ w $ Green> $ ENDCOLOR"
И у меня есть несколько вопросов.
- В чем разница между "[\ e [32; 1m]" и \ e [32; 1m "? Они одинаковые?
- После запуска команды «export PS1» она работает хорошо, но когда я ввожу около 20 символов, символы перезаписываются, как я прикрепил. Что с этим не так?
- Что означает STARTCOLOR (\ e [40m) / ENDCOLOR (\ e [0m)?
http://a.imageshack.us/img8/606/resultqm.jpg
ADDED
После некоторых тестов я получил следующее изменение, которое может решить проблему. То есть формат "\ e" должен быть заменен на формат "\ [\ e".
Красный = "\\ e [1; 31 м" - не работает Красный = "\ [\ e [1; 31м \]" - работает
\$
для автоматического переключения между индикацией root и non-root.Из руководства по bash:
\[
и\]
не передаются в терминал. Они говорят Bash, что символы между ними не будут напечатаны. Без них bash не мог бы знать, что последовательность, следующая за escape-символом (например, g.[32;1m
), Не занимает места на экране, что объясняет, почему он не вычислял длину приглашения правильно, когда вы их опускали.Обратите внимание, что вы не очень последовательны в своем вопросе (или, возможно, это просто ошибка с Markdown); вам нужно иметь буквенную последовательность скобок с обратной косой чертой
$PS1
, а не просто скобку (которая будет отображаться буквально).Escape-последовательности, начинающиеся с
\e
, интерпретируются эмулятором терминала. Они задокументированы в документе управляющих последовательностей Xterm (ctlseqs) (другие эмуляторы терминала, как правило, в основном совместимы). Например,\e[32;1m
переключается на жирный и зеленый передний план;\e[40m
переключает цвет фона на черный;\e[0m
восстанавливает атрибуты по умолчанию.источник
Большинство современных эмуляторов терминала могут использовать управляющие коды ANSI для управления различными аспектами дисплея.
Большинство кодов ANSI начинаются с двухсимвольного кода ESC- [это escape-символ (десятичный ASCII 27), за которым следует символ открытой квадратной скобки. Эта последовательность также известна как CSI или инициатор последовательности управления.
Поскольку escape-символ не является тем, который вы можете ввести напрямую (клавиша Esc имеет другое, часто используемое в приложениях), bash использует «\ e» для ссылки на него.
Для изменения цвета текста используется команда ANSI Set Graphics Mode:
где
<value>
может быть список значений, разделенных точкой с запятой (;
). Обычно используется только одно значение, хотя атрибут bold полезен в сочетании с атрибутами цвета.Глядя на значения, перечисленные в ответе Александра Погребняка, 0 или 1 перед точкой с запятой выбирают жирным шрифтом или нет:
Здесь есть полезный список кодов http://ascii-table.com/ansi-escape-sequence.php
источник