oc exec with heredoc:无法将变量传递到命令中以在容器中执行; rpc 错误:代码 = 2 desc = oci 运行时错误

问题描述 投票:0回答:2

我想使用

oc exec
在我的 pod 中执行
cat
。在这个
cat
命令中,我需要扩展一些变量。

cat /opt/amq/data/split-$index/running

所以,我尝试这个:

oc exec -i $pod -- '"/bin/bash" -s <<EOF cat /opt/amq/data/split-$index/running EOF'

但我无法让它工作。

rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:235: starting container process caused "exec: \"\\\"/bin/bash\\\" -s <<-EOF cat /opt/amq/data/split-$index/running EOF\": stat \"/bin/bash\" -s <<-EOF cat /opt/amq/data/split-$index/running EOF: no such file or directory"

我可以将 cat 和 bash 放在单独的行中,但错误是相同的:

$index
未扩展。

                    oc exec -i $pod -- '"/bin/bash" -c <<EOF
                    cat /opt/amq/data/split-$index/running
                    EOF'

错误:

rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:235: starting container process caused "exec: \"\\\"/bin/bash\\\" -c <<EOF\\n                    cat /opt/amq/data/split-$index/running\\n                    EOF\": stat \"/bin/bash\" -c <<EOF\n                    cat /opt/amq/data/split-$index/running\n                    EOF: no such file or directory"
bash openshift herestring
2个回答
0
投票

找到一种不使用heredoc的方法。

oc rsh
可以直接运行命令并返回结果:

oc rsh pod_name cat /opt/data/...

这就是我所需要的。那我就不需要

oc exec

并且,查看错误消息,它显示:

stat \"/bin/bash\" -s <<-EOF cat /opt/amq/data/split-$index/running EOF: no such file or directory

注意

stat
,它似乎正在寻找文件。


0
投票

你可以尝试引用EOF:

oc exec -i $pod -- /bin/bash -s <<'EOF' 
cat /opt/amq/data/split-$index/running
EOF

参见https://linuxize.com/post/bash-heredoc/

© www.soinside.com 2019 - 2024. All rights reserved.