[英]Struggling to unset an environment variable in bash
我之前使用以下方法设置了一个环境变量:
echo export "AVARIABLE=example" >> ~/.bash_profile
但现在使用后:
unset AVARIABLE
当我打开一个新的 shell 时,环境变量仍然存在吗? 我在这里做错了什么? 甚至跑步:
source ~/.bash_profile
不起作用?
如果要打开新的外壳,则要做的第一件事就是获取~/.bash_profile
。 然后,再次设置变量。
如果要永久删除它,请编辑~/.bash_profile
以再次删除有问题的行。 (这仅对新会话有效。)
如果只想在当前shell中unset
,那么unset
很好,但是如您所见,它不会影响shell的新调用。
做这个:
#!/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”,并且该行就是您要删除的行,那么这就是您的脚本。 否则,修改条件的regexp。
之后请注意文件的权限和所有者。 通常它们是644,如果您与拥有home目录的同一用户启动它,则不会有任何问题。 但是我重复一遍……这是非常糟糕的做法,请谨慎!
干杯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.