如何删除导出的环境变量?

How do I delete an exported environment variable?

提问人:A. K. 提问时间:7/30/2011 最后编辑:Peter MortensenA. K. 更新时间:9/14/2023 访问量:1526178

问:

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

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

Linux 环境变量 未设置

评论

5赞 Elijah Lynn 4/4/2019
对于那些在鱼壳中寻找如何做到这一点的人,请参阅 stackoverflow.com/questions/30703860/...(即使这个问题不是针对特定的贝壳)

答:

3626赞 Peder Klingenberg 7/30/2011 #1

unset是您要查找的命令。

unset GNUPLOT_DRIVER_DIR

评论

12赞 eLRuLL 4/19/2014
但这仅适用于会话,确定取消设置它呢?或者也许搜索变量集在哪里,以便您可以去删除它?
59赞 matt5784 5/8/2014
这应该适用于每个终端实例。通常,每次打开终端窗口时,它都会从各个位置加载变量,例如 ~/.bashrc、~/.profile 等。您在一个终端实例中设置的任何变量都不会转移到另一个终端实例。如果您有一个变量,似乎每次打开终端时都会自动设置,请尝试在主目录中查找各种隐藏文件。或者,要查看它的设置位置,请尝试“grep -r <X> ~”,其中 <X> 是变量的名称。如果您的主目录中有很多文件,这可能需要一段时间。
3赞 olejorgenb 12/11/2016
不过,这也从 shell 中删除了变量。这是唯一的办法吗?unexportT="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T
5赞 Peder Klingenberg 12/15/2016
@olejorgenb 至少在 bash 中,您可以说删除导出但将值保留在当前 shell 中。declare +x MYVAR
15赞 jarno 5/3/2017
@PederKlingenberg在 Bash 中也同样有效。export -n MYWAR
244赞 Eric Leschinski 6/4/2014 #2

在 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命令在登录时将所有环境变量清除为默认值。

评论

16赞 Rodrigo Gurgel 1/13/2016
也许比 更好,它更轻,因为它不需要打印所有变量,然后将其输出发送到另一个 (grep) 进程。此外,可以捕获多个与相同模式匹配的变量。Plus2,可以通过点击<Tab>来完成变量的名称(如果存在,这也可能是您想要执行的操作的提示)。echo $VARIABLEenv | grep VARIABLEenv | VARIABLEecho $VARIABLE
14赞 calasyr 9/24/2016
'环境 |grep VARIABLE“比”echo $VARIABLE“更好,因为我可以看出它真的消失了
12赞 hmijail 10/4/2016
@RodrigoGurgel,不会告诉您 VARIABLE 是 shell 变量(此处称为“局部变量”)还是环境变量,这是演练的重点。echo $VARIABLE
4赞 Mark Chackerian 7/28/2017
请注意,这似乎正在创建一个子外壳(至少在 Mac 上),这可能会产生意想不到的后果。env -i bash
3赞 Thomas BDX 2/1/2019
使用 echo @RodrigoGurgel不会显示设置为空字符串或 NUL 的现有变量。不过,就您而言,测试变量的正确方法是 .env | grep -e '^VARNAME='
17赞 Nilesh K. 12/20/2017 #3

这也可能有效。

export GNUPLOT_DRIVER_DIR=

评论

21赞 Palec 12/24/2017
该变量仍然存在,但它包含一个空字符串,如您在命令的输出中看到的那样。只是使用该变量的应用程序可能不区分不存在的环境变量和空环境变量。env
1赞 Nilesh K. 1/2/2018
是的,它将包含,这只是为了删除值而不是删除变量。但是,是的,可以使用 - 未设置GNUPLOT_DRIVER_DIR。
0赞 Chad 12/14/2019
这在 PAGER 变量的情况下不起作用。我尝试取消设置我的 PAGER 设置,但这只是完全禁用了分页——我所有的手册页都直接转储到终端。 做了诀窍,将其恢复为默认行为。export PAGER=unset PAGER
1赞 Peter Mortensen 1/26/2022
也许是时候更新你的答案了?(但没有“编辑:”、“更新:”或类似内容 - 问题/答案应该看起来就像今天写的一样。
31赞 G Eitan 11/14/2018 #4

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

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

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

行为的区别在于,使用 setenv 命令设置的变量会自动导出到子 shell,而使用 set 设置的变量则不会。

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

unset x

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

unsetenv x

注意:在上述所有内容中,我假设变量名称为“x”。

学分:

评论

1赞 4levels 3/5/2019
关于 set / setenv wrt subshell 之间的差异的很好的补充!
12赞 borz 2/13/2020 #5

如上述答案所述,如果您曾经设置过变量,则应该可以工作。如果您已将其永久设置,或者只需将其从那里删除即可。unset GNUPLOT_DRIVER_DIRexport~/.bashrc~/.zshrc

13赞 krishnaacharyaa 1/26/2023 #6

在 Linux 和 macOS 上,您可以使用该命令删除环境变量。unset

unset GNUPLOT_DRIVER_DIR

永久删除变量,

在 Linux 中

您可以编辑 shell 配置文件,例如目录中的 或,并删除导出变量的行。.bashrc.bash_profile/etc/profile.d

.bashrc file:

nano ~/.bashrc

然后,搜索行导出并将其删除。然后保存文件。GNUPLOT_DRIVER_DIR

在 Windows 中

使用该命令删除环境变量。setx

setx GNUPLOT_DRIVER_DIR ""

您可以在以下链接中找到有关环境变量以及如何管理环境变量的详细信息:

评论

0赞 default123 7/19/2023
是否有“永久”删除它的命令?有点像未设置,但不仅适用于单个终端实例?
0赞 Steven the Easily Amused 7/21/2023
default123 简答,否。 阅读答案,例如@Trunk,如果您的目标是查找并删除设置环境变量的内容。虽然首先要看的是你自己的 shell 初始化文件(例如 .bashrc,.bash_profile 用于 bash shell)。
1赞 Trunk 3/20/2023 #7

LINUX的

首先找到哪个脚本文件定义了变量并将其添加到环境中。

查看 /etc 文件,如 profile、bash.bashrc、.bashrc、.bashrc_login 等

并在用户的主目录中查找名称相似的文件。

如果它不在其中任何一个中,则它可能位于某个脚本文件中,该脚本文件是已安装包的一部分。例如,包 SDKMAN(用于管理备用 SDK 版本)创建一个名为 DERBY_HOME 的变量。若要查找创建它的脚本文件,请将以下搜索命令应用于 /etc 文件夹:

$ sudo egrep -lir THE_VAR_NAME /etc

这应该会产生一些输出,例如:

/etc/profile.d/jdk.sh
/etc/profile.d/jdk.csh

如果用户默认使用 C-shell 环境,则需要单独的文件 jdk.csh

找到后,只需导航到包含脚本文件的文件夹,在本例中为 /etc/profile.d/,然后编辑文件(具有管理员权限),删除变量赋值并保存:

$ cd /etc/profile.d/

$ sudo gedit jdk.sh

$ sudo gedit jdk.sh

当然,在这种情况下,设置 env 变量的包正在使用中,所以我保留了它。

但是,如果该包未被使用,并且 env var 对启动过程无意义,则应将其删除。

窗户

使用此 YouTube 视频中显示的过程。