Я использовал Переменные среды целую вечность, но только что читаю о Переменных среды по сравнению с переменными Shell. Согласно определению:
Книга, которую я читаю, продолжает указывать, что использование экспорта берет переменную в Вашей текущей среде (оболочка удара) и делает ее доступной в любой каждой среде, пока Вы не изменяете ее снова.
Но если я изменяю Переменную среды (HISTSIZE, например) путем вызова export HISTZISE=999
, и затем проверьте значение в другую терминальную вкладку (echo $HISTSIZE
), изменение не видимо. Почему это то, если изменение, как предполагается, в масштабе всей системы? Лично я привык к всегда установке моих Переменных среды при открытии новой терминальной вкладки, и я принял как очевидное, что экспорт значений не будет влиять на другие вкладки (оболочки?).
Таким образом, мой вопрос: различные терминальные вкладки считают различными средами оболочки? И что действительно "в масштабе всей системы" затем означает?
Спасибо за справку!
export
экспортирует переменную всем дочерним элементам текущей оболочки.
Итак, если вы сделаете
somevariable=somevalue
export somevariable
bash
echo $somevariable
, вы увидите значение $ somevariable в этой новой оболочке.
Однако оболочки на других вкладках терминала не являются дочерними элементами оболочки на первой вкладке, поэтому они не наследуют экспортированные переменные.
Оболочки в терминальных вкладках - это все дочерние элементы процесса gnome, который открыл терминал, поэтому они «братья и сестры». Вы можете убедиться в этом, вызвав ps -f
на двух вкладках терминала и посмотрев на столбец PPID (идентификатор родительского процесса) строки bash. В моем примере оба имеют родительский 5319, который является терминальным процессом gnome.
вкладка 1:
$ ps -f
UID PID PPID C STIME TTY TIME CMD
jean 5329 5319 0 10:36 pts/0 00:00:00 bash
jean 5359 5329 0 10:37 pts/0 00:00:00 ps -f
вкладка 2:
$ ps -f
UID PID PPID C STIME TTY TIME CMD
jean 5363 5319 0 10:37 pts/1 00:00:00 bash
jean 5372 5363 0 10:37 pts/1 00:00:00 ps -f
$ ps -f -p5319
UID PID PPID C STIME TTY TIME CMD
jean 5319 2299 0 10:36 ? 00:00:02 /usr/lib/gnome-terminal/gnome-t