Shell脚本中如何搭配xargs使用unset命令?
问题原因
- 直接报错原因:
unset是 Bash 内置命令,不属于存放在系统PATH路径下的独立可执行文件。而xargs调用命令时默认只会查找系统层面的可执行文件,找不到内置命令unset,因此抛出找不到文件的错误。 - 隐藏逻辑问题:就算你通过
xargs -I {} bash -c 'unset {}'的方式强行让xargs调用内置命令,也无法达到修改当前shell环境变量的目的。因为xargs启动的进程是当前shell的子进程,子进程内对环境变量的修改完全不会同步到父 shell 中,操作无效。
正确实现方案
直接在当前shell中用循环遍历匹配到的变量名,执行unset即可:
for proxy_var in $(env | grep -i "_proxy=" | cut -d "=" -f1); do unset "$proxy_var" done
执行完成后可以执行echo $HTTP_PROXY验证是否已经成功清除代理环境变量。
内容的提问来源于stack exchange,提问作者sorosh_sabz
相关产品推荐
相关产品推荐

