bash - 如何在 shell 脚本中使用 unset 和 xargs?

标签 bash shell xargs

ITNOA

我想写bash脚本,删除一些环境变量

我的问题是当我在命令下运行时

env | grep -i _proxy= | cut -d "=" -f1 | xargs -I {} echo {}

我看到下面的结果

HTTPS_PROXY
HTTP_PROXY
ALL_PROXY

但是当我将 echo 替换为 unset 时,如下所示

env | grep -i _proxy= | cut -d "=" -f1 | xargs -I {} unset {}

我看到下面的错误

xargs: unset: No such file or directory

我的问题是什么?如果我错误地使用了xargs

最佳答案

您有 xargs 在管道中运行。因此它在一个单独的进程中运行,并且不能改变“父”shell 的环境。

此外,xargs 使用命令,而不是 shell 内置命令。

你需要这样做:

while read -r varname; do unset "$varname"; done < <(
    env | grep -i _proxy= | cut -d "=" -f1
)

mapfile -t varnames  < <(env | grep -i _proxy= | cut -d "=" -f1)
unset "${varnames[@]}"

关于bash - 如何在 shell 脚本中使用 unset 和 xargs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69678238/

相关文章:

linux - 管道到不接受管道的命令

linux - Bash:使用来自不同命令的模式的命令的grep结果?

macos - 使用 sed 执行递归查找和替换仅更改第一个文件

linux - 如何递归地 curl 所有文件

python - 为什么Python看不到环境变量?

linux - 如何从 su 命令获取密码?

linux - 如何使 bash 脚本不区分大小写?

java - 从 Eclipse 中调试 gradle 测试

linux - UNIX如何多次解析目录中的文件列表

linux - 什么时候 xargs 应该优先于 while-read 循环?