两台Mac执行gsutil ls结果不同,MacB无法列出Bucket列表如何解决
异常原因
两台设备的gsutil二进制哈希完全一致,排除程序本身的版本/损坏问题,异常根源是MacB的运行环境向gsutil注入了额外的未知参数,常见触发原因按出现概率排序:
- 调用的gsutil路径不匹配,实际运行的不是校验哈希的
~/google-cloud-sdk/bin/gsutil程序 - 配置了gsutil的shell别名(alias),执行时自动追加了额外参数
- 存在同名的gsutil shell函数,拦截命令并插入了额外参数
- 配置了
GSUTIL_OPTS全局环境变量,默认向gsutil注入前缀参数 - .boto配置文件存在异常参数配置,导致命令解析出错
解决步骤
按顺序执行以下操作,每执行一步就测试gsutil ls和gsutil help ls是否恢复正常:
- 确认命令路径匹配
执行which gsutil,检查输出是否为校验过的~/google-cloud-sdk/bin/gsutil(展开为实际用户目录的对应路径)。如果路径不匹配,调整shell的PATH环境变量顺序,将~/google-cloud-sdk/bin放在最前面,或卸载其他路径下的gsutil版本。 - 排查shell别名
执行alias gsutil,如果有输出说明存在别名配置。临时生效执行unalias gsutil,永久生效需要删除.zshrc/.bashrc/.bash_profile等shell配置文件中对应的alias行。 - 排查shell函数
执行type gsutil,如果输出显示为「shell function」,说明存在同名函数拦截。临时生效执行unset -f gsutil,永久生效删除shell配置文件中对应的函数定义。 - 排查全局环境变量
执行echo $GSUTIL_OPTS,如果输出不为空说明存在全局参数注入。临时生效执行unset GSUTIL_OPTS,永久生效删除shell配置文件中对应的export行。 - 排查配置文件
对比MacA和MacB的~/.boto、~/.config/gcloud/boto.cfg配置内容,删除MacB中多余的异常配置项。
内容的提问来源于stack exchange,提问作者tomlla
相关产品推荐
相关产品推荐

