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

努力在bash中取消设置环境变量,bash,environment-variables,unset,.bash-profile,Bash,Environment Variables,Unset,.bash Profile,我以前使用以下方法设置过环境变量: echo export "AVARIABLE=example" >> ~/.bash_profile 但现在使用后: unset AVARIABLE 当我打开一个新的shell时,env变量仍然存在?我做错了什么?即使是跑步: source ~/.bash_profile 不起作用?如果您要打开一个新的shell,它要做的第一件事就是源代码~/.bash\u profile。在这里,变量被再次设置 如果要永久删除它,请编辑~/.bash_配置

我以前使用以下方法设置过环境变量:

echo export "AVARIABLE=example" >> ~/.bash_profile
但现在使用后:

unset AVARIABLE
当我打开一个新的shell时,env变量仍然存在?我做错了什么?即使是跑步:

source ~/.bash_profile

不起作用?

如果您要打开一个新的shell,它要做的第一件事就是源代码~/.bash\u profile。在这里,变量被再次设置

如果要永久删除它,请编辑~/.bash_配置文件以再次删除有问题的行。这将仅对新会话生效

如果您只想在当前shell中取消设置它,那么取消设置是可以的,但正如您所看到的,它不会影响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_配置文件的内容。。。然后将删除它,然后尝试再次生成它,除了与您需要的常规表达式匹配的行之外,所有行都相同。。。我只放了导出,但选中了它,因为这可能会根据.bash_配置文件的内容删除其他行

所以要小心这个。。。如果您非常确定.bash_配置文件中只有一行包含字符串导出,并且该行是您要删除的,那么这就是您的脚本。否则,请修改条件的regexp

在此之后,请注意文件的权限和所有者。通常它们是644,如果您使用拥有home dir的同一用户启动它,您将不会有任何问题。但我重复一遍。。。这是一个非常糟糕的做法,小心


干杯。

您只在当前shell中感到不安,而不是在整个shell会话中。@Madbreaks抱歉,我本应该更清楚:即使在我当前的shell中,当我使用echo命令时,它仍然运行。即使在我当前的shell中,我也无法取消设置。谢谢,这正是我需要做的,但之前不清楚如何做。我很感激。