bash - kubectl exec 返回无异常的错误消息?
问题描述
我目前正在尝试在我的 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"
为什么 kubectl 会给exec
我带来问题?
解决方案
当你写:
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'
推荐阅读
- css - 从 Angular 应用程序复制/粘贴时保持文本格式
- reactjs - react-leaflet 中的 GeoJSON 不会在地图上渲染图层
- java - 如何在经典(非引导)Spring 应用程序中注册 MessageDispatcherServlet
- vb.net - PostgreSQL:VB.NET ODBC 更新无法正常工作
- regex - 正则表达式 - 找出包含一个单词或其子字符串后不跟某个字符的字符串
- swift - 如何在 macOS 中获取实时麦克风输入?
- bash - systemctl service systemd-notify 不适用于非 root 用户
- excel - 我想获取“另存为”菜单中列出的“当前文件夹”
- vue.js - 从 [__ob__: Observer] 中提取数据
- javascript - 我的列表项不会在单击按钮时删除