ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

对于那些寻找如何在 Fish shell 中执行此操作的人,请参阅 stackoverflow.com/questions/30703860/…(即使此问题不是针对特定 shell)

P
Peder Klingenberg

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 中也可以使用。
P
Peter Mortensen

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

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

env | grep DUALCASE

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

DUALCASE=1
export DUALCASE

检查它是否存在:

env | grep DUALCASE

输出:

双写=1

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

unset DUALCASE

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

env | grep DUALCASE

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

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

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

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 可以通过点击 <Tab> 来完成变量的名称。 (如果它存在,那也可能暗示你想要做什么)。
'环境 | grep VARIABLE' 比 'echo $VARIABLE' 好,因为我可以说它真的消失了
@RodrigoGurgel,echo $VARIABLE 不会告诉您 VARIABLE 是 shell 变量(此处称为“局部变量”)还是环境变量,这是演练的重点。
请注意,env -i bash 似乎正在创建一个子shell(至少在 Mac 上),这可能会产生意想不到的后果。
@RodrigoGurgel 使用 echo 不会显示设置为空字符串或 nul 的现有变量。不过,就您而言,测试变量的正确方法是 env | grep -e '^VARNAME='
P
Peter Mortensen

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

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

设置 x = "某事" setenv x "某事"

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

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

unset x

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

unsetenv x

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

学分:

TCSH / CSH:set vs setenv 命令差异

set, unset, setenv, unsetenv, export — Shell 环境变量内置函数


关于 set / setenv wrt 子shell之间差异的重要补充!
P
Peter Mortensen

这也可能有效。

export GNUPLOT_DRIVER_DIR=

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

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