Я хочу, чтобы мое приглашение bash менялось в зависимости от внешних условий.
Вот выдержка из руководства bash:
PROMPT_COMMAND: If set, the value is executed as a command prior to issuing each primary prompt.
PS1: The value of this parameter is expanded (see PROMPTING below) and used as the primary prompt string.
В моем .bash_profile
у меня есть следующее:
export PROMPT_COMMAND="echo -n ┏━━━[$(date +%H:%M)]"
export PS1="━━[\t]━━━┓\n\$ "
Вот что я вижу в терминале:
┏━━━[03:46]━━[03:46:52]━━━┓
$ cd ..
┏━━━[03:46]━━[03:51:37]━━━┓
$
Как видите, PROMPT_COMMAND не выполняется более одного раза и всегда остается статичным.
Как я могу выполнить его «до выдачи каждого приглашения», как указано в руководстве?
Я использую Mac OS X 10.9.3.
echo $BASH_VERSION
3.2.51(1)-release
Запускается PROMPT_COMMAND
каждый раз, но $(...)
фрагмент оценивается только при .bash_profile
загрузке. Это связано с тем, что двойные кавычки означают расширение переменных и команд.
Если вы используете одинарные кавычки, команда не подставляется во время выполнения .bash_profile
, она оценивается при PROMPT_COMMAND
запуске.
Ваш date
вызов был оценен, когда вы установили PROMPT_COMMAND
, поэтому он навсегда застрял в то время, когда вы запускали:
export PROMPT_COMMAND="echo -n ┏━━━[$(date +%H:%M)]"
Вместо этого попробуйте определить функцию и назначить ее PROMPT_COMMAND:
function prompt_command() {
PS1="┏━━━[$(date +%H:%M)]━━[\t]━━━┓\n\$ "
}
export PROMPT_COMMAND=prompt_command
Вы также можете использовать \@
текущее время в 12-часовом формате AM/PM в вашей подсказке. Так:
function prompt_command() {
PS1="┏━━━[\@]━━[\t]━━━┓\n\$ "
}
export PROMPT_COMMAND=prompt_command
Дал бы вам:
┏━━━[06:17 PM]━━[18:17:57]━━━┓
$
И пока мы говорим о настройках bash, позвольте мне добавить отличный проект bash-it — это bash, эквивалентный oh-my-zsh , и он поставляется с кучей вспомогательных функций для создания тем. Возможно, вы обнаружите, что это делает подобные вещи немного проще.
Сергей
Сергей
PS1="[\$(date +%H:%M)] \u@\w\ $ "
. Это делает PROMPT_COMMAND излишним.0942v8653
PROMPT_COMMAND
.