Подтвердить что ты не робот

Как вставить переменную среды внутри приглашения bash

Я могу установить переменную среды внутри приглашения bash следующим образом:

export PS1="[\[email protected]\H/$FOO \W]\$ "

Приглашение не изменяется при изменении переменной среды: $FOO, потому что переменная $FOO не интерпретируется.

Я могу обойти это, выполнив следующее, снова экспортировав PS1. Но я хотел бы иметь возможность сделать это на одной строке:

[[email protected] ]$ echo $FOO
foo
[[email protected] ]$ export PS1="[$FOO]$ "
[foo]$ export FOO=bla
[bla]$ 

Можно ли это сделать в одной строке?

4b9b3361

Ответ 1

вам нужно добавить обратную косую черту, чтобы получить ее оценку не во время определения FOO, но при оценке PS1, так что:

export PS1="[\$FOO]$ "

вместо:

export PS1="[$FOO]$ "

Обратите внимание на \ перед $FOO.

Ответ 2

Попробуйте установить переменную PROMPT_COMMAND:

prompt() {
    PS1="[$FOO]$ "
}

PROMPT_COMMAND=prompt

Из http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x264.html:

Bash предоставляет переменную среды, называемую PROMPT_COMMAND. Содержимое этой переменной выполняется как обычная команда Bash перед тем, как Bash отображает приглашение.