Терминальные вкладки соответствуют различным оболочкам?

Я использовал Переменные среды целую вечность, но только что читаю о Переменных среды по сравнению с переменными Shell. Согласно определению:

  • Переменные среды "в масштабе всей системы" и наследованы дочерними оболочками и процессами
  • Переменные Shell только действительны в оболочке, в которой они установлены

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

Но если я изменяю Переменную среды (HISTSIZE, например) путем вызова export HISTZISE=999, и затем проверьте значение в другую терминальную вкладку (echo $HISTSIZE), изменение не видимо. Почему это то, если изменение, как предполагается, в масштабе всей системы? Лично я привык к всегда установке моих Переменных среды при открытии новой терминальной вкладки, и я принял как очевидное, что экспорт значений не будет влиять на другие вкладки (оболочки?).

Таким образом, мой вопрос: различные терминальные вкладки считают различными средами оболочки? И что действительно "в масштабе всей системы" затем означает?

Спасибо за справку!

4
задан 14 April 2019 в 10:46

1 ответ

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
7
ответ дан 1 December 2019 в 09:12

Другие вопросы по тегам:

Похожие вопросы: