在 Bash shell 中,我想在使用命令运行时首先清理环境。
我想取消设置所有环境变量,只设置对 shell 运行至关重要的变量,以及我的脚本完成任务所需的变量。
有没有办法以一种简单而干净的方式做到这一点?
最佳答案
您可以使用 env
和包装脚本:
#!/bin/bash
env -i /path/to/main_script.sh
来自man env
:
-i, --ignore-environment start with an empty environment
当然,如果您手动运行脚本,您也可以将脚本作为 env -i script.sh
运行。不幸的是,据我所知,不能像这样使用脚本 shebang 通过 env
运行 bash
;根据定义,shebang 只能接受内核解析的两个参数。
我能想到的使用 env
或 exec -c
(几乎相同)的另一个半可靠解决方案是使用 exec -c $0
如果您检测到它不干净,则使用干净的环境重新运行脚本。假设 $HOME
设置在不干净的环境中,并且没有设置在干净的环境中(在我的安装中是这样):
#!/bin/bash
[ "$HOME" != "" ] && exec -c $0
# rest of the script here
https://stackoverflow.com/questions/9671027/