Переменная PS1 и её сёстры
Всегда хотел узнать, почему у переменной окружения $PS1 (prompt string) в конце цифра 1.
Оказывается — таких переменных аж четыре штуки ($PS1, $PS2, $PS3, $PS4), и все они отображают приглашения ко вводу в различных ситуациях.
Показать
Далее речь идёт о системной оболочке bash.
В моих системах $PSx выглядят так:
$PS1 — приглашение командной строки, используется в оболочке для отображения запроса ввода и отображается тогда, когда консоль готова считать команду.
Значение по умолчанию:
"\u@\h:\w\$ "
или
"\s-\v\$ "
(расшифровку значений спецсимволов bash см. внизу заметки).
$PS2 — вторичное приглашение командной строки, отображается, когда консоль нуждается в дополнительном вводе для завершения команды, которую уже начала считывать.
Значение по умолчанию:
"> "
Очень длинную команду можно разбить с помощью символа ’\’ в конце строки, при этом приглашение изменится на $PS2, ожидая ввода продолжения команды.
$PS3 — третичное приглашение, выводится тогда, когда оператор select ожидает ввода значений.
Значение по умолчанию:
""
хотя в bash’е вроде как
"#?"
$PS4 — приглашение четвертого уровня, выводится в начале каждой строки вывода во время трассировки выполнения (вызывается с ключом -x).
Значение по умолчанию:
"+ "
Во всех переменных можно использовать следующие спецсимволы (напомню, речь идёт об оболочке bash):
\a | символ Bell (звонок) (код 07) | \d | дата в формате «ДеньНедели Месяц Число» (т. е. «Tue May 26») | |
\\ | символ обратного слеша (обратная косая черта) | \e | символ Escape (код 033) | |
\h | имя хоста до первой точки | \H | полное имя хоста | |
\j | количество заданий, выполняемых оболочкой в фоне | \l | базовое имя наименования терминального устройства оболочки (в случае входа через ssh-клиент возвращает не полное имя, например pts/3, а только 3) | |
\n | символ перевода строки | \r | символ возврата каретки | |
\s | имя оболочки, базовое имя от переменной $0 (после последнего символа /) | \t | текущее время в 24-часовом формате (HH:MM:SS) | |
\T | текущее время в 12-часовом формате (HH:MM:SS) | \@ | текущее время в 12-часовом формате (am/pm) | |
\A | текущее время в 24-часовом формате (HH:MM) | \u | имя текущего пользователя | |
\v | версия оболочки bash (например, 2.00) | \V | версия и номер релиза bash (например, 2.00.0) | |
\w | полный путь текущей директории | \W | базовое имя текущей директории | |
\! | номер истории зтой команды | \# | номер зтой команды | |
\$ | если UID == 0, то символ ’#’, иначе ’$’ | \nnn | символ, соответствующий восмеричному числу nnn | |
\[ | начало последовательности невыводимых символов. Может использоваться для осуществления управления терминалом в приглашении | \] | конец последовательности невыводимых символов | |
\D{format} | строка format передаётся в strftime(3), результат вставляется строку приглашния оболочки, пустой формат приводит к выводу локального времени. Скобки необходимы. |
Ну и напоследок бонус — скрипт генерации таблицы цветов в bash