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

Posted

技术标签:

【中文标题】努力在 bash 中取消设置环境变量【英文标题】:Struggling to unset an environment variable in bash 【发布时间】:2015-03-08 08:15:55 【问题描述】:

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

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

但现在使用后:

unset AVARIABLE

当我打开一个新的外壳时,环境变量仍然存在?我在这里做错了什么?甚至跑步:

source ~/.bash_profile

不工作?

【问题讨论】:

您只是在当前的 shell 中取消设置,而不是跨 shell 会话。 @Madbreaks 道歉我应该更清楚:即使在我当前的 shell 中,当我使用 echo 命令时它仍然运行。即使在我当前的 shell 中,我也无法取消设置。 【参考方案1】:

如果你要打开一个新的 shell,它做的第一件事就是 source ~/.bash_profile。在那里,变量被再次设置。

如果您想永久删除它,请编辑您的 ~/.bash_profile 以再次删除有问题的行。 (这只会对新会话生效。)

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

【讨论】:

谢谢,这正是我需要做的,但之前不清楚如何做。我很感激。【参考方案2】:

这样做:

#!/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,如果您使用拥有主目录的同一用户启动它,您将没有问题。但我再说一遍......这是一个非常糟糕的做法,要小心!!

干杯。

【讨论】:

以上是关于努力在 bash 中取消设置环境变量的主要内容,如果未能解决你的问题,请参考以下文章

认识与学习bash

在 grunt-env 中取消设置环境变量

shell总结

如何在 Kubernetes 中取消设置环境变量?

Linux系统环境变量加载过程

bash shell中的环境变量