使用eval执行AWS EKS命令报错‘command not found’的原因
问题原因与解决办法
为什么eval会报错?
aws eks update-kubeconfig命令的输出包含两类内容:
- 真正需要执行的Shell代码(比如
export KUBECONFIG=...这类设置环境变量的语句) - 普通提示文本(比如
Updated context ...这类状态说明)
当你用eval $(aws ...)时,$(...)会捕获该命令的所有标准输出,eval会把捕获到的所有内容当成Shell命令逐一执行。提示文本Updated context ...不是合法的Shell命令,自然就会报Updated: command not found错误。
而直接执行aws ...时,命令的输出只是打印到终端,Shell不会去执行这些输出内容,所以不会触发错误。
解决办法
方法1:过滤出需要执行的命令
只提取aws输出中以export开头的有效命令,再传给eval执行:
eval $(aws eks --region us-east-1 update-kubeconfig --name eventplatform$input | grep '^export')
方法2:直接执行命令(无需eval)
实际上aws eks update-kubeconfig默认会直接修改~/.kube/config文件(kubeconfig默认路径),如果你的KUBECONFIG环境变量已经指向这个路径,直接执行命令即可,不需要eval:
aws eks --region us-east-1 update-kubeconfig --name eventplatform$input
内容的提问来源于stack exchange,提问作者Hofbr
相关产品推荐
相关产品推荐

