繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM