终端标签是否对应不同的外壳?

终端标签是否对应不同的外壳?

我已经使用环境变量很久了,但刚刚才读到关于环境变量与 Shell 变量的文章。根据定义:

  • 环境变量是“系统范围的”,并由子 shell 和进程继承
  • Shell 变量仅在设置它们的 shell 中有效

我正在读的书继续指出,使用出口在您当前环境(bash shell)中获取一个变量并使其在任何环境中可用,直到您再次更改它。

但是,如果我通过调用 更改环境变量(例如 HISTSIZE)export HISTZISE=999,然后在不同的终端选项卡(echo $HISTSIZE)中检查该值,则更改不可见。如果更改应该是系统范围的,为什么会这样?就我个人而言,我习惯于在打开新的终端选项卡时始终设置环境变量,并且我理所当然地认为导出值不会影响其他选项卡(shell?)。

所以我的问题是:不同的终端选项卡是否被视为不同的 shell 环境?那么“系统范围”是什么意思?

谢谢您的帮助!

答案1

export将变量导出到当前 shell 的所有子 shell。

所以如果你

somevariable=somevalue
export somevariable
bash 
echo $somevariable

您将在这个新的 shell 中看到 $somevariable 的值。

但是其他终端选项卡中的 shell 不是第一个选项卡中的 shell 的子项,因此它们不会继承导出的变量。

终端选项卡中的 shell 都是打开终端的 gnome 进程的子进程,因此它们是“兄弟姐妹”。您可以通过调用ps -f两个终端选项卡并查看 bash 行的 PPID(父进程 ID)列来验证这一点。在我的示例中,两个 shell 的父进程均为 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

相关内容