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

ars1skjm  于 2023-05-23  发布在  Shell
关注(0)|答案(2)|浏览(156)

我想写一个bash脚本,去掉一些环境变量
我的问题是当我运行低于命令

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

我看到下面的结果

HTTPS_PROXY
HTTP_PROXY
ALL_PROXY

但是当我用unset替换echo时,类似于下面的内容

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

我看到下面的错误

xargs: unset: No such file or directory

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

cczfrluj

cczfrluj1#

您有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[@]}"
vmjh9lq9

vmjh9lq92#

我发现了这个:

]$ env |grep AWS_|tr "=" " "|awk '{print $1}'
AWS_SESSION_TOKEN
AWS_SECRET_ACCESS_KEY
AWS_ACCESS_KEY_ID
]$ env |grep AWS_|tr "=" " "|awk '{print $1}'|xargs -n1 unset
xargs: unset: No such file or directory
]$

下面简单的解决方案为我工作

unset `env |grep AWS_|tr "=" " "|awk '{print $1}'`

或以下

unset `env |grep AWS_|cut -d= -f1`

相关问题