Где я могу найти полную ссылку на переменную $ PS1?

20

Переменная PS1 по умолчанию на моем компьютере (Kubuntu 13.10) выглядит так:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

Я ищу ссылку на то, как работает переменная $ PS1, которая, как минимум, позволяет мне понять вышеуказанную переменную PS1.

Марк Раймонд
источник
@ RaduRădeanu Я переместил это в отдельный ответ теперь.
Марк Раймонд
Как общее примечание, вы можете поиграть с этим, установив значение PS1в терминале, например PS1="How r u, \u?". Изменение будет длиться только до тех пор, пока вы не закроете терминал.
DJVG
Связанный: askubuntu.com/a/984073/301745
wjandrea

Ответы:

24

Ссылки

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

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

  • Раздел 2.4 и 2.5 объясняются основы настройки PS1, включая (печатаемые) escape-символы.
  • Раздел 3.4 объясняет, почему \[и\] необходимо.
  • Раздел 6 объясняет все основные (непечатаемые) escape-последовательности, которые вы, возможно, захотите использовать, включая настройку цвета приглашения и заголовка окна xterm.

Это руководство объясняет, как ${}работает Bash в целом, и этот вопрос Ask Ubuntu объясняет немного больше о том, как это работает debian_chroot.

Между тем, я думаю, что каждый символ в стандартной переменной Ubuntu PS1 объясняется.

Объяснение приглашения Ubuntu

Подсказка состоит из трех частей:

  • \[\e]0;\u@\h: \w\a\] устанавливает строку заголовка окна xterm:

    • \[ начинает раздел непечатаемых символов
    • \e]0; является escape-последовательностью для 'set xterm title' (я полагаю, что числа, отличные от 0, будут устанавливать другие свойства xterm, хотя я не проверял это)
    • \u@\h: \wназвание для использования (см. ниже \u, \hи \w)
    • \a отмечает конец заголовка
    • \] отмечает конец непечатаемых символов
  • ${debian_chroot:+($debian_chroot)}расширяется до значения $ debian_chroot в скобках, если установлено значение $ debian_chroot. Смотрите этот вопрос для получения дополнительной информации о $ debian_chroot.
  • \u@\h:\w\$ сама подсказка:

    • \u расширяется до текущего имени пользователя
    • \h расширяется до текущего имени хоста
    • \w расширяется до текущего рабочего каталога
    • \$расширяется #для root и $для всех остальных пользователей
Марк Раймонд
источник
6

Согласно справочнику Bash , PS1это:

Основная строка приглашения. Значением по умолчанию является \s-\v\$. См. Управление запросом , для полного списка escape-последовательностей, которые были раскрыты доPS1 как отобразится.

Некоторые другие хорошие ссылки могут быть:

Раду Рэдяну
источник
Руководство по bash полностью описывает escape-последовательности PS1: gnu.org/software/bash/manual/bashref.html#Printing-a-Prompt
Гленн Джекман,
@Radu - Спасибо, это дало мне больше, чем раньше. Кажется, все еще мало информации о том, что может быть внутри, \[и \]хотя - есть ли у вас какие-либо ссылки на это?
Марк Рэймонд
@MarkRaymond Это объясняется в двух предоставленных мной ссылках ( печать приглашения и PS1 для Linux / Unix ): \[- начинайте последовательность непечатаемых символов, которые можно использовать для встраивания последовательности управления терминалом в приглашение; \]- завершить последовательность непечатных символов. Просто не торопитесь и внимательно читайте;)
Раду Радеану
Да, я читал это - я искал ссылку на то, что делают эти непечатные символы. Извините, если я не был ясен!
Марк Раймонд
@MarkRaymond Непечатные символы в приглашениях .
Раду Рэдяну
5

ss64.com, кажется, имеет лучшую ссылку, которую я нашел.

Это объясняет следующие переменные:

\d   The date, in "Weekday Month Date" format (e.g., "Tue May 26"). 

\h   The hostname, up to the first . (e.g. deckard) 
\H   The hostname. (e.g. deckard.SS64.com)

\j   The number of jobs currently managed by the shell. 

\l   The basename of the shell's terminal device name. 

\s   The name of the shell, the basename of $0 (the portion following 
    the final slash). 

\t   The time, in 24-hour HH:MM:SS format. 
\T   The time, in 12-hour HH:MM:SS format. 
\@   The time, in 12-hour am/pm format. 

\u   The username of the current user. 

\v   The version of Bash (e.g., 2.00) 

\V   The release of Bash, version + patchlevel (e.g., 2.00.0) 

\w   The current working directory. 
\W   The basename of $PWD. 

\!   The history number of this command. 
\#   The command number of this command. 

\$   If you are not root, inserts a "$"; if you are root, you get a "#"  (root uid = 0) 

\nnn   The character whose ASCII code is the octal value nnn. 

\n   A newline. 
\r   A carriage return. 
\e   An escape character. 
\a   A bell character.
\\   A backslash. 

\[   Begin a sequence of non-printing characters. (like color escape sequences). This
     allows bash to calculate word wrapping correctly.

\]   End a sequence of non-printing characters.

\[ ... \]Определяет ряд непечатных символов. Они необходимы для правильного отслеживания положения курсора.

В \eвашем приглашении начинается escape-последовательность. Подробнее об этом здесь (обратите внимание, «Esc» на этой странице является \eпоследовательность).

  • Примечание: мне никогда не нравились escape-последовательности. Используйте, tputчтобы получить код выхода для вас.

${debian_chroot:+($debian_chroot)}это расширение параметра. Смотри здесь

  • Он пишет, ($debian_chroot)если $debian_chrootв противном случае ничего не установлено.
харакири
источник