我试图从脚本中取消所有的环境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