linux - 取消设置一组环境变量

标签 linux shell environment-variables

我遇到的情况是,有大约 10 - 30 个环境变量与特定应用程序有关。在重新配置和重新编译应用程序之前,我想删除(即取消设置)所有相关的环境变量。该列表太烦人,无法明确输入,所以我想要一些自动化。

我看过Unset group of variables但这似乎不是我想要的。

我想出了下面的命令,它显示了我原则上想做的事情(取消设置名称中带有“G4”的所有环境变量——实际上它不是很完美,如果它有“G4”就会取消设置值也一样)。

printenv |grep G4 |awk 'BEGIN{FS="=";}{system("unset "$1);}'

如我所料,这不会影响父 shell,这正是我想要的行为。我以前遇到过这种情况,在那些情况下我使用了“来源”,但我不太明白如何在这里做到这一点。将上述命令放在 shell 脚本中然后获取它似乎是行不通的。

我知道我可以首先找出是什么设置了这些变量并将其删除并打开另一个 shell 但我不认为这是一个解决方案(尽管这可能是我在回答这个问题时要做的) .我也不想一个一个地取消设置,这很烦人,而且似乎没有必要这样做。

最佳答案

这几乎是正确的。您需要做的是将这些命令输出到父 shell 中,方法是使用 command substitution。 .首先打印出变量的名称。您的 awk 命令是执行此操作的一种方法:

printenv |grep G4 |awk 'BEGIN{FS="=";}{print $1;}'

然后使用命令替换将输出提供给 shell:

unset $(printenv |grep G4 |awk 'BEGIN{FS="=";}{print $1;}')

$(...) 将命令的输出提供给 shell,就像您输入它一样。我说“几乎”是因为 shell 对输出进行了一些处理,例如删除换行符。在这种情况下没问题,因为 unset 命令可以使用多个变量的名称来取消设置。如果出现问题,请使用双引号引用输出:"$(....)"。该链接提供了所有详细信息。

关于linux - 取消设置一组环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21518069/

相关文章:

linux - 为什么我的启动脚本没有运行

Java和sudo命令执行

c++ - 基本的 linux C++ 网络 : connection refused, 但是没有出现错误

mysql - 使用 mysql 数据库

linux - 记录过滤

linux - Bash if 语句,使用来自文件的 grep -eq 0 from $?

rspec - 在 Rails 中,使用 Figaro、Zeus 和 RSpec,如何在运行规范时设置 Figaro 的 secret token ?

c - 在没有本地硬盘的远程服务器上保存图像(jpg)

c++ - 使用 C++ 功能在系统路径中进行模式匹配

makefile - 将日期和时间附加到 Linux makefile 中的环境变量