kubectl exec管道传参至Linux二进制文件失效问题求助
解决方案
问题核心是管道符|的解析层级错误:直接执行kubectl exec ... -- echo "..." | iiq console时,管道被你的本地shell处理——echo命令在容器内执行,但iiq console是在本地终端运行的,本地自然找不到容器里的iiq二进制文件。
要让整个带管道的命令都在容器内部执行,有两种可靠写法:
方法1:用bash -c包裹完整命令
把整个命令串交给容器内的bash执行,用单引号避免本地shell解析内部内容:
kubectl exec [container] -n [namespace] -- /bin/bash -c 'echo "import /opt/tomcat/webapps/identityiq/WEB-INF/config/BLANKIdentity.xml" | /opt/tomcat/webapps/identityiq/WEB-INF/bin/iiq console'
方法2:使用Here-Doc传递命令
通过Here-Doc把命令传递给容器内的bash,用单引号包裹EOF防止本地变量替换:
kubectl exec [container] -n [namespace] -- /bin/bash << 'EOF' echo "import /opt/tomcat/webapps/identityiq/WEB-INF/config/BLANKIdentity.xml" | /opt/tomcat/webapps/identityiq/WEB-INF/bin/iiq console EOF
为什么之前的变体无效?
你尝试的<(echo ... | iiq console)是本地shell的进程替换特性,这条命令里的管道依然在本地处理,iiq console还是跑在本地,所以依然会报错找不到命令。
内容的提问来源于stack exchange,提问作者thepip3r
相关产品推荐
相关产品推荐

