不能从脚本中取消设置envvariables

我试图从脚本中取消所有的环境variables。 脚本运行良好,但如果我运行env它仍然显示所有的variables设置。
如果我从CLI运行命令,它的工作原理和variables未设置。

unset `env | awk -F= '/^\w/ {print $1}' | xargs` 

有任何想法如何从脚本运行这个?
另外,有任何想法如何从脚本源/ etc / profile? 这也不pipe用。

我需要设置具有相同名称但不同path的variables,这取决于我的用户需要的实例。

稍后编辑:
好吧,我结束了这个(而不是优雅,但无论)解决scheme:

 . script 

其中包含:

 unset `env | awk -F= '/^\w/ {print $1}'|egrep -v "HOSTNAME|TERM|SHELL|HISTSIZE|SSH_CLIENT|SSH_TTY|USER|LS_COLORS|KDEDIR|MAIL|PATH|INPUTRC|PWD|LANG|HISTIGNORE|SSH_ASKPASS|TEST|SHLVL|HOME|LD_ASSUME_KERNEL|LOGNAME|SSH_CONNECTION|LESSOPEN|HISTTIMEFORMAT|G_BROKEN_FILENAMES|_"|xargs` source env_variable_file 

谢谢!

基本上这是一个标准答案。 你不能这样做,因为脚本运行在一个新的subprocess中。 该进程得到自己的环境,并且不能改变父进程的环境,要么设置variables,要么取消设置variables。

你可以用当前的环境运行脚本. 命令。 你可以用同样的方法获取/ etc / profile:

。 / etc / profile文件

我试图运行你的脚本,它不适合我。

我谷歌了一下,发现这一点:

 unset $(/usr/bin/env | egrep '^(\w+)=(.*)$' | \ egrep -vw 'PWD|USER|LANG' | /usr/bin/cut -d= -f1); 

这一个实际上工作;-)

用于采购文件

 source /etc/profile 

是你说的正确的方式。

如果我这样修改你的脚本

 unset $(env | awk -F= '{print $1}' | xargs) 

它也有效。

我不认为如果交互式地运行命令与脚本是否有区别。

使用-v到unset命令可以将项目从环境中取出; 请注意,在这个testing脚本的末尾,你可能会得到错误,因为我们没有设置$ PATH,所以找不到像'id'这样的程序。

 #!/bin/sh LIST=`env | awk -F= '/^\w/ {print $1}' | xargs` for item in $LIST; do echo "$item = ${!item}"; done unset -v $LIST for item in $LIST; do echo "$item = ${!item}"; done HISTSIZE=5555 echo $HISTSIZE source /etc/profile echo $HISTSIZE