bor*_*zzz 5 command-line bash environment-variables
我多年来一直在使用环境变量,但只阅读了有关环境变量与外壳变量的信息。根据定义:
我正在阅读的这本书继续指出,使用export在您当前的环境(bash shell)中使用一个变量,并使其在任何环境中都可用,直到您再次更改它为止。
但是,如果我通过调用 更改环境变量(例如 HISTSIZE)export HISTZISE=999
,然后检查不同终端选项卡 ( echo $HISTSIZE
) 中的值,则更改不可见。如果更改应该是系统范围的,为什么会这样?我个人习惯于在打开新的终端选项卡时始终设置我的环境变量,并且我认为导出值不会影响其他选项卡(外壳?)。
所以我的问题是:不同的终端选项卡是否被视为不同的 shell 环境?那么“系统范围”是什么意思?
谢谢您的帮助!
export
将变量导出到当前 shell 的所有子级。
所以如果你这样做
somevariable=somevalue
export somevariable
bash
echo $somevariable
Run Code Online (Sandbox Code Playgroud)
您将在这个新 shell 中看到 $somevariable 的值。
但是,其他终端选项卡中的 shell 不是第一个选项卡中 shell 的子级,因此它们不会继承导出的变量。
终端选项卡中的 shell 都是打开终端的 gnome 进程的子进程,因此它们是“兄弟姐妹”。您可以通过调用ps -f
两个终端选项卡并查看 bash 行的列 PPID(父进程 ID)来验证这一点。在我的示例中,它们都有父进程 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
Run Code Online (Sandbox Code Playgroud)
选项卡 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
Run Code Online (Sandbox Code Playgroud)