【问题标题】:How do I delete an exported environment variable?如何删除导出的环境变量?
【发布时间】:2011-10-16 04:53:36
【问题描述】:

在安装gnuplot之前,我设置了环境变量GNUPLOT_DRIVER_DIR = /home/gnuplot/build/src。在安装过程中,出了点问题。

我想删除GNUPLOT_DRIVER_DIR 环境变量。我怎样才能实现它?

【问题讨论】:

标签: linux environment-variables unset


【解决方案1】:

这也可能有效。

export GNUPLOT_DRIVER_DIR=

【讨论】:

  • 变量仍然存在,但它包含一个空字符串,正如您在env 命令的输出中看到的那样。可能是使用该变量的应用程序无法区分不存在和空的环境变量。
  • 是的,它将包含,这只是为了删除值而不是删除变量。但是可以使用 - 取消设置 GNUPLOT_DRIVER_DIR。
  • 这在 PAGER 变量的情况下不起作用。我试图用export PAGER= 取消我的PAGER 设置,但这只是完全禁用了分页——我的所有手册页都直接转储到了终端。 unset PAGER 成功了,将其恢复为默认行为。
  • 也许是时候update你的答案了? (但没有“编辑:”、“更新:”或类似的 - 问题/答案应该看起来好像是今天写的。)
【解决方案2】:

最初的问题没有提到变量是如何设置的,但是:

C shell (csh/tcsh)中有两种设置环境变量的方法:

  1. set x = "something"
  2. setenv x "something"

不同之处在于使用 setenv 命令设置的变量会自动导出到子 shell,而使用 set设置的变量> 不是。

要使用 set 取消设置变量集,请使用

unset x

要使用 setenv 取消设置变量集,请使用

unsetenv x

注意:在以上所有内容中,我假设变量名是'x'。

学分:

【讨论】:

  • 关于 set / setenv wrt subshel​​ls 之间差异的重要补充!
【解决方案3】:

在 Bash 中创建和删除环境变量的演练:

测试 DUALCASE 变量是否存在(空输出):

env | grep DUALCASE

没有,所以创建变量并导出它:

DUALCASE=1
export DUALCASE

检查是否存在:

env | grep DUALCASE

输出:

DUALCASE=1

它就在那里。所以摆脱它:

unset DUALCASE

检查它是否仍然存在(空输出):

env | grep DUALCASE

DUALCASE 导出的环境变量被删除。

帮助清除本地和环境变量的额外命令:

在登录时将所有局部变量恢复为默认值:

CAN="chuck norris"
set | grep CAN

输出:

CAN='查克诺里斯'

env | grep CAN # Empty output

exec bash
set | grep CAN
env | grep CAN # Empty output

exec bash 命令清除所有局部变量,但不清除环境变量。

在登录时将所有环境变量恢复为默认值:

export DOGE="so wow"
env | grep DOGE

输出:

DOGE=哇

env -i bash
env | grep DOGE # Empty output

env -i bash 命令在登录时将所有环境变量清除为默认值。

【讨论】:

  • 也许echo $VARIABLEenv | grep VARIABLE 更好,因为它不需要打印所有变量,然后将其输出发送到另一个(grep)进程。另外,env | VARIABLE 可以捕获多个与相同模式匹配的变量。 Plus2, echo $VARIABLE 可以通过点击 来完成变量的名称(如果它存在,这也可能是你想要做什么的提示)。
  • 'env | grep VARIABLE' 比 'echo $VARIABLE' 好,因为我可以说它真的消失了
  • @RodrigoGurgel, echo $VARIABLE 并没有告诉你 VARIABLE 是 shell 变量(这里称为“局部变量”)还是环境变量,这是演练的重点。跨度>
  • 请注意,env -i bash 似乎正在创建一个子shell(至少在 Mac 上),这可能会产生意想不到的后果。
  • @RodrigoGurgel 使用 echo 不会显示设置为空字符串或 nul 的现有变量。不过,就您而言,测试变量的正确方法是env | grep -e '^VARNAME='
【解决方案4】:

如上述答案中所述,如果您使用 export 设置变量,unset GNUPLOT_DRIVER_DIR 应该可以工作。如果您已将其永久设置在 ~/.bashrc~/.zshrc 中,则只需将其从那里删除即可。

【讨论】:

    【解决方案5】:

    unset 是您要查找的命令。

    unset GNUPLOT_DRIVER_DIR
    

    【讨论】:

    • 但这仅适用于会话,那么确定取消设置呢?或者也许搜索变量集在哪里,所以你可以去删除它?
    • 这应该适用于每个终端实例。通常,每次打开终端窗口时,它都会从不同的地方加载变量,例如 ~/.bashrc、~/.profile 等。您在一个终端实例中设置的任何变量都不会转移到另一个终端实例中。如果您有一个似乎在每次打开终端时都会自动设置的变量,请尝试查看主目录中的各种隐藏文件。或者,要查看它的设置位置,请尝试“grep -r ~”,其中 是变量的名称。如果您的主目录中有很多文件,这可能需要一段时间。
    • 这也会从 shell 中删除变量。是unexportT="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T 的唯一方法吗?
    • @olejorgenb 至少在 bash 中,您可以说 declare +x MYVAR 来删除导出但保留当前 shell 中的值。
    • @PederKlingenberg export -n MYWAR 在 Bash 中也能正常工作。
    猜你喜欢
    • 2021-04-28
    • 2015-11-08
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2013-10-25
    • 2014-07-11
    • 2014-12-15
    相关资源
    最近更新 更多