努力在bash中取消设置环境变量

时间:2015-01-09 22:22:52

标签: bash environment-variables unset .bash-profile

我之前使用以下方式设置了一个环境变量:

echo export "AVARIABLE=example" >> ~/.bash_profile

但现在使用后:

unset AVARIABLE

当我打开一个新shell时,env var仍然存在?我在这做错了什么?甚至跑步:

source ~/.bash_profile

不起作用?

2 个答案:

答案 0 :(得分:3)

如果您要打开一个新shell,它首先要做的就是获取~/.bash_profile。然后,变量再次设置。

如果您想永久删除它,请修改~/.bash_profile以再次删除相关行。 (这只会对新会话生效。)

如果您只想在当前shell中取消设置它,那么unset就可以了,但正如您所见,它不会影响shell的新调用。

答案 1 :(得分:-1)

这样做:

#!/bin/bash

file="~/.bash_profile"

readarray -t FILE < <(cat < "${file}")
rm -rf "${file}"
for item in "${FILE[@]}"; do
    if [[ ! "${item}" =~ export ]]; then
        echo "${item}" >> "${file}"
    fi
done

小心!这将在一个数组中保存你的.bash_profile文件的内容...然后将删除它然后将尝试再次使用所有相同的行生成它,除了匹配你需要的正常表达的行...我把只有“导出”但请检查这一点,因为这可能会删除其他行,具体取决于.bash_profile的内容。

请注意这一点......如果您非常确定.bash_profile上只有一行包含字符串“export”,并且该行是您要删除的行,那么这就是您的脚本。否则,修改条件的正则表达式。

在此之后要小心文件的权限和所有者。通常它们是644,如果你使用拥有主目录的同一用户启动它,你就没有问题。但我再说一遍......这是一个非常糟糕的做法,小心!!

干杯。