如何在 shell 脚本中使用 unset 和 xargs?
How to use unset with xargs in shell script?
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[@]}"
我遇到了这个:
]$ env |grep AWS_|tr "=" " "|awk '{print }'
AWS_SESSION_TOKEN
AWS_SECRET_ACCESS_KEY
AWS_ACCESS_KEY_ID
]$ env |grep AWS_|tr "=" " "|awk '{print }'|xargs -n1 unset
xargs: unset: No such file or directory
]$
下面的简单解决方案对我有用
unset `env |grep AWS_|tr "=" " "|awk '{print }'`
或以下
unset `env |grep AWS_|cut -d= -f1`
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[@]}"
我遇到了这个:
]$ env |grep AWS_|tr "=" " "|awk '{print }'
AWS_SESSION_TOKEN
AWS_SECRET_ACCESS_KEY
AWS_ACCESS_KEY_ID
]$ env |grep AWS_|tr "=" " "|awk '{print }'|xargs -n1 unset
xargs: unset: No such file or directory
]$
下面的简单解决方案对我有用
unset `env |grep AWS_|tr "=" " "|awk '{print }'`
或以下
unset `env |grep AWS_|cut -d= -f1`