Bash
Обработка приглашения системы
Поиск…
Синтаксис
- export PS1 = «something» # отображается, когда bash ожидает команду, которую нужно ввести в
- экспорт PS2 = "anotherthing" # dsplayed, когда оператор распространяется на большее количество строк
- export PS3 = «запрос вопроса для оператора выбора» # редко используется приглашение для выбора. Сначала установите PS3 в соответствии с вашими потребностями, затем выберите select . См. Help select
- экспорт PS4 = «в основном полезен для отладки, номер строки и т. д.» # используется для отладки сценариев bash.
параметры
Побег | подробности |
---|---|
\ а | Символ колокола. |
\ d | Дата в формате «День недели» (например, «Вторник 26 мая»). |
\ D {FORMAT} | FORMAT передается в `strftime '(3), и результат вставляется в строку приглашения; пустой FORMAT приводит к представлению времени, специфичному для локали. Требуются скобки. |
\ е | Управляющий символ. \ 033 тоже конечно. |
\час | Имя хоста, до первого `. '. (т. е. не доменная часть) |
\ЧАС | Имя хоста в конечном итоге с доменной частью |
\ J | Количество рабочих мест, которыми в настоящее время управляет оболочка. |
\ л | Базовое имя имени терминала терминала. |
\ п | Новая строка. |
\р | Возврат кареты. |
\ s | Имя оболочки, базовое имя `$ 0 '(часть, следующая за последней косой чертой). |
\ т | Время в 24-часовом формате HH: MM: SS. |
\ T | Время в 12-часовом формате HH: MM: SS. |
@ | Время, в 12-часовом формате am / pm. |
\ A | Время в 24-часовом формате HH: MM. |
\ и | Имя пользователя текущего пользователя. |
\ v | Версия Bash (например, 2.00) |
\ V | Выпуск Bash, версия + patchlevel (например, 2.00.0) |
\ ш | Текущая рабочая директория с $ HOME сокращена тильдой (используется переменная $ PROMPT_DIRTRIM). |
\ W | Базисное имя $ PWD, с $ HOME сокращенно с тильдой. |
! | Номер истории этой команды. |
# | Номер команды этой команды. |
$ | Если эффективный uid равен 0, # , в противном случае $ . |
\ NNN | Символ, код ASCII которого является восьмеричным значением NNN. |
\ | Обратная косая черта. |
\ [ | Начните последовательность непечатаемых символов. Это можно использовать для встраивания управляющей последовательности терминала в приглашение. |
\] | Завершите последовательность непечатаемых символов. |
Использование переменной PROMPT_COMMAND envrionment
Когда выполняется последняя команда в экземпляре интерактивного баха, отображается оценочная переменная PS1. Перед тем, как фактически показать PS1 bash, будет ли установлен PROMPT_COMMAND. Это значение этого var должно быть вызываемой программой или скриптом. Если этот var задан, эта программа / сценарий вызывается до того, как отобразится приглашение PS1.
# just a stupid function, we will use to demonstrate
# we check the date if Hour is 12 and Minute is lower than 59
lunchbreak(){
if (( $(date +%H) == 12 && $(date +%M) < 59 )); then
# and print colored \033[ starts the escape sequence
# 5; is blinking attribute
# 2; means bold
# 31 says red
printf "\033[5;1;31mmind the lunch break\033[0m\n";
else
printf "\033[33mstill working...\033[0m\n";
fi;
}
# activating it
export PROMPT_COMMAND=lunchbreak
Использование PS2
PS2 отображается, когда команда распространяется на несколько строк, и bash ожидает больше нажатий клавиш. Он также отображается, когда вводится составная команда, например , ... do..done и аналогично .
export PS2="would you please complete this command?\n"
# now enter a command extending to at least two lines to see PS2
Использование PS3
Когда оператор select выполняется, он отображает данные, предваряемые номером, и затем отображает приглашение PS3:
export PS3=" To choose your language type the preceding number : "
select lang in EN CA FR DE; do
# check input here until valid.
break
done
Использование PS4
PS4 отображается, когда bash находится в режиме отладки.
#!/usr/bin/env bash
# switch on debugging
set -x
# define a stupid_func
stupid_func(){
echo I am line 1 of stupid_func
echo I am line 2 of stupid_func
}
# setting the PS4 "DEBUG" prompt
export PS4='\nDEBUG level:$SHLVL subshell-level: $BASH_SUBSHELL \nsource-file:${BASH_SOURCE} line#:${LINENO} function:${FUNCNAME[0]:+${FUNCNAME[0]}(): }\nstatement: '
# a normal statement
echo something
# function call
stupid_func
# a pipeline of commands running in a subshell
( ls -l | grep 'x' )
Использование PS1
PS1 - это обычное системное приглашение, указывающее, что bash ожидает ввода команд. Он понимает некоторые escape-последовательности и может выполнять функции или прогаммы. Поскольку bash должен позиционировать курсор после подсказки displayes, он должен знать, как вычислить эффективную длину строки подсказки. Для указания непечатаемых последовательностей символов в переменной PS1 используются экранированные скобки: \ [ непечатная последовательность символов ] . Все сказанное верно для всех PS * vars.
(Черная каретка указывает курсор)
#everything not being an escape sequence will be literally printed
export PS1="literal sequence " # Prompt is now:
literal sequence ▉
# \u == user \h == host \w == actual working directory
# mind the single quotes avoiding interpretation by shell
export PS1='\u@\h:\w > ' # \u == user, \h == host, \w actual working dir
looser@host:/some/path > ▉
# executing some commands within PS1
# following line will set foreground color to red, if user==root,
# else it resets attributes to default
# $( (($EUID == 0)) && tput setaf 1)
# later we do reset attributes to default with
# $( tput sgr0 )
# assuming being root:
PS1="\[$( (($EUID == 0)) && tput setaf 1 \]\u\[$(tput sgr0)\]@\w:\w \$ "
looser@host:/some/path > ▉ # if not root else <red>root<default>@host....