没有环境变量的运行Shell脚本


17

据我所知,新运行的shell脚本继承了它的环境变量。有没有办法阻止这个?(没有变量继承的运行shell)

Answers:


21

看来您可以env -i在运行脚本之前为脚本添加前缀,以清除环境:

env -i sh test.sh

来自man env

-i, --ignore-environment
              start with an empty environment

不确定为什么要这么做...


谢谢。这工作了!在不影响IDE的配置环境变量的情况下,我需要在IDE中调用构建脚本。但仍远未达到目标。这可以帮助您提高好奇心!
Eonil'9

添加另一个用例:我目前正在评估fish和zsh作为bash的替代方法。但是我还没有准备好将候选shell升级为我的登录shell(如chsh ...。)。如果我只是打开一个终端窗口并运行,zsh或者运行fish((有或没有关系-l都没关系)),它会污染来自于壳我开始做它的伎俩用。env -c解决了这个问题对我来说我做的。env -i TERM=xterm-256color $(which fish)
Paidhi

如果您的cron任务由于环境配置不正确而需要测试,则很有用。这也是测试脚本是否对环境设置进行假设的一种好方法。谢谢!
razzed

另一个可能有用的地方是测试一些定期作业(例如cron作业)以确保脚本上没有环境依赖性。与将在p清单中的“ Exec”资源中运行的命令相同。
TommyTheKid 2014年

1

一种可能性(尽管看起来很丑):

exec -c $SCRIPT将在一个空环境下启动$ SCRIPT。(请参阅man bash搜索exec \[-cl\])。


1
这与env -i几乎相同,但是,我选择使用env -i,因为exec停止执行其余脚本。
Eonil'9

-1

据我所知,答案是“否”。您可以在脚本本身中覆盖环境变量。脚本完成运行后,环境变量的值应切换回其原始值。您可能需要将脚本作为子进程运行:$ this.script.sh&,以避免每次运行脚本时都必须退出shell以便将环境变量重置为原始值。

编辑:

从较早的海报看来,我不可能做到这一点是错误的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.