在Bash shell中,我想在使用命令运行时首先清理环境.
我想取消设置所有环境变量,只设置对shell起作用的关键变量,以及我的脚本完成它的任务所需的那些变量.
有没有办法以简单干净的方式做到这一点?
Edu*_*nec 40
您可以使用env和包装脚本:
#!/bin/bash
env -i /path/to/main_script.sh
来自man env:
Run Code Online (Sandbox Code Playgroud)-i, --ignore-environment start with an empty environment
当然,您也可以像env -i script.sh运行手动一样运行脚本.不幸的是,据我可以告诉一个不能使用脚本家当运行bash通过env这样的; shebang只能接受内核解析的两个参数.
我能想到的另一个半可靠的解决方案是使用env或者exec -c(几乎完全相同)用于exec -c $0在干净的环境中重新运行脚本,如果你发现它不干净的话.假设$HOME设置在一个不干净的环境中,而不是设置在干净的环境中(在我的安装中是这样):
#!/bin/bash
[ "$HOME" != "" ] && exec -c $0
# rest of the script here
Eri*_*ski 11
命令: env -i bash
例如,创建本地和环境变量,然后重置为默认值:
el@defiant ~$ LOCAL_DOGE="such variable"
el@defiant ~$ ENVIRONMENT_DOGE="much code"
el@defiant ~$ export ENVIRONMENT_DOGE
el@defiant ~$ set | grep DOGE
ENVIRONMENT_DOGE='much code'
LOCAL_DOGE='such variable'
el@defiant ~$ env | grep DOGE
ENVIRONMENT_DOGE=much code
el@defiant ~$ env -i bash
el@defiant ~$ set | grep DOGE
el@defiant ~$ env | grep DOGE
el@defiant ~$
所以,哇,LOCAL_DOGE并且ENVIRONMENT_DOGE都走了一个命令.
env - /bin/bash
例:
el@defiant ~$ DOGE1="one"
el@defiant ~$ export DOGE2="two"
el@defiant ~$ set | grep DOGE
DOGE1=one
DOGE2=two
el@defiant ~$ env | grep DOGE
DOGE2=two
el@defiant ~$ env - /bin/bash
el@defiant ~$ set | grep DOGE
el@defiant ~$ env | grep DOGE
当我尝试时,这有效:
for c in $(set | cut -d '=' -f 1); do unset $c; done
它在const变量上出现错误,但我能够忽略它们.
| 归档时间: | 
 | 
| 查看次数: | 25638 次 | 
| 最近记录: |