努力在 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 中取消设置环境变量的主要内容,如果未能解决你的问题,请参考以下文章