我目前正试图在我的kubernetes pod上执行一个简单的bash命令,但似乎遇到了一些没有意义的错误。
如果我执行到docker容器,并运行命令纯
I have no name!@kafka-0:/tmp$ if [ $(comm -13 <(sort selectedTopics) <(sort topics.sh) | wc -l) -gt 0 ]; then echo "hello"; fi
我得到Hello作为输出。
但如果从外部执行与相同的操作
kubectl exec --namespace default kafka-0 -c kafka -- bash -c "if [ $(comm -13 </tmp/selectedTopics </tmp/topics.sh| wc -l) -gt 0 ]; then echo topic does not exist && exit 1; fi"
然后我收到一条错误消息,说明/tmp/topics.sh: No such file or directory
事件,尽管我可以做这个
kubectl exec --namespace $namespace kafka-0 -c kafka -- bash -c "cat /tmp/topics.sh"
为什么kubectlexec
会给我带来问题?
编写时:
kubectl ... "$(cmd)"
在本地主机上执行cmd
以创建用作kubectl
的参数的字符串。换句话说,您在本地主机上执行comm -13 </tmp/selectedTopics </tmp/topics.sh| wc -l
,而不是在pod中。
如果你想避免在本地扩展,你应该使用单引号:
kubectl exec --namespace default kafka-0 -c kafka -- bash -c 'if comm -13 </tmp/topics.sh grep -q . ; then echo topic does not exist >&2 && exit 1; fi'