Bash。 unset all 环境变量问题

Bash. Unset all environment variables problem

我试图删除当前 shell 和子 shell:

的所有环境变量
bash-3.2$ unset $(env | cut -d= -f1) OLDPWD
bash-3.2$ export
bash-3.2$

对于 shell,一切都按预期进行,但 subshell:

出现了一些问题
bash-3.2$ /bin/bash
bash-3.2$ export
declare -x OLDPWD
declare -x PWD="/Users/alex"
declare -x SHLVL="1"
declare -x _="/bin/bash"
bash-3.2$ env
PWD=/Users/alex
SHLVL=1
_=/usr/bin/env
  1. bash 已创建变量。主目录中没有文件.bashrc 和其他bash 可以在启动时从中获取数据的文件。他从哪里得到这些变量?
  2. 如果未设置 PATH,bash 如何执行非内置命令?

bash has created variables. ... Where did he get these variables from?

来自 Bash。从字面上看,来自 Bash 源代码。

https://github.com/bminor/bash/blob/f3a35a2d601a55f337f8ca02a541f8c033682247/variables.c#L858

How can bash execute non-builtin commands if PATH is not set?

未设置 PATH 时,Bash 使用一些“默认 PATH”。源代码中有一个宏,可以通过编译./configuration选项更改。

https://github.com/bminor/bash/blob/f3a35a2d601a55f337f8ca02a541f8c033682247/config-top.h#L66 and https://github.com/bminor/bash/blob/f3a35a2d601a55f337f8ca02a541f8c033682247/variables.c#L495


在空白环境中使用env -i来运行一些东西。