2017-01-30 3 views
2

Когда мы выводим значение PS1, устанавливаются:Почему env не печатает переменную PS1?

$ echo $PS1 
[\[email protected]\h \W]\$ 

Мы можем использовать env команды переменной печать среды. Почему он не перечисляет переменную PS1?

$ env | grep PS1 
# No output here 
+0

Вам следует попробовать выполнить команду «set | grep PS1». –

ответ

7

Поскольку PS1 не является (как правило, и в вашем конкретном случае) переменной окружения.

Есть много переменных, установленных в экземпляре Баш, который вы можете перечислить с:

$ set 
BASH=/bin/bash 
BASHOPTS=checkwinsize:cmdhist:… 
BASH_ALIASES=() 
BASH_ARGC=() 
. 
. 
SHLVL=1 
SSH_AGENT_PID=853 
SSH_AUTH_SOCK=/tmp/ssh-Ofupc03xWIs7/agent.795 
TERM=xterm-256color 

Но многие из них не являются переменными среды. Например:

$ echo "$PPID" 
1062 

$ env | grep PPID 

Вы можете добавить переменные среды с помощью export. Так PS1 может быть установлен в качестве переменной среды:

$ export PS1 
$ env | grep PS1 
PS1=\[email protected]\h:\w\$ 

И переменная может быть отменена экспортироваться путем удаления его экспорта флаг с заявляют (что сохранит значение переменной, просто не экспортированный):

$ declare +x PS1 
$ env | grep PS1 
$ echo $PS1 
\[email protected]\h:\w\$ 

Или, более резко, по unset а переменному:

$ unset PS1 
$ env | grep PS1 

в Баше, declare может быть использован для печати флагов переменных:

$ declare -p PS1 
declare -- PS1="\${debian_chroot:+(\$debian_chroot)}\\[email protected]\\h:\\w\\\$ " 

$ export PS1 

$ declare -p PS1 
declare -x PS1="\${debian_chroot:+(\$debian_chroot)}\\[email protected]\\h:\\w\\\$ " 

Обратите внимание на -x набор для переменной после ее экспорт.

+0

В моей системе у меня есть PS1.set | grep PS1 PS1 = '\ h: \ W \ u \ $'. Кроме того, вы можете постоянно добавлять переменные в среду. –

+0

@terencehill Что значит? Что у вас PS1 как переменная? да, у этой системы есть и это. Как переменная среды? Может быть, иногда. – sorontar

+0

Я имею в виду, что переменная окружения - это просто переменная, которая загружается при запуске системы. –

2

В зависимости от того, где установлена ​​переменная PS1, ее можно рассматривать как локальную или экологическую (см. Этот post для определения окружающей среды).

Если это локальный адрес, вы не можете распечатать его с помощью env. Но вы можете распечатать его командой .

+0

И вы можете удалить переменную из среды с помощью 'declare + x var'. – sorontar

Смежные вопросы