我们通常用脚本写:
PATH="xxx"
export PATH
我知道 PATH 是 bash 中的一个公共(public)变量,然后 export
调用 setenv()
来做一些事情。
但是当 PATH 被赋值时,为什么 bash 不自动导出 PATH。
是否有人只想更改 PATH 变量而不导出它?或者,其他一些原因?
最佳答案
事实上,您可以在您的情况下省略导出语句。尝试一下:打开一个子 shell(通过键入 bash
),然后将 PATH 变量设置为不同的值而不导出它,然后打开另一个子 shell(这次通过键入 bash --norc
,以避免 .bashrc 由于更改 PATH 而可能出现的错误),然后执行 echo $PATH
。您会看到 PATH 变量已更改,即使您没有导出它也是如此。
然而,原因并不是 PATH 有任何特殊之处(即由 bash shell 的某些内部魔法自动导出)。它被导出,因为您标记一次用于导出的变量被放入环境中——这就是“导出”的实际含义——因此被所有子进程继承。对于 PATH,很可能已经在/etc/profile 中设置了一些 PATH,当然您会在此文件中找到 export PATH
。每当 bash 作为登录 shell 运行时都会获取此文件,因此由它产生的所有其他进程继承。
在您自己的点文件中导出 PATH 仍然是一个好主意,因为您的 bash 将独立于父进程的环境。毕竟,可以构建一个示例,其中一个交互式非登录 bash shell 由一个在其环境中没有有 PATH 的进程调用。
关于c - 为什么 bash 在分配时不自动导出 PATH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53551088/