kubernetes在env中执行命令.可随eval变化



我想在容器中执行一个命令(让它成为ls(,然后用echo$读取退出代码kubectl exec -ti mypod -- bash -c "ls; echo $?"不起作用,因为它返回的是我当前shell的退出代码,而不是容器的退出代码。

因此,我尝试在清单中定义的env变量上使用eval

apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- container2
image: varunuppal/nonrootsudo
env:
- name: resultCmd
value: 'echo $?'

则CCD_ 2,但eval命令不返回任何内容。

bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

注意,我可以在容器中运行这两个命令

kubectl exec -ti mypod bash
#ls;eval $resultCmd
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
**0**

我怎样才能让它工作?提前感谢

之所以会出现这种情况,是因为您使用了双引号而不是单引号。单引号不能代替任何东西,但双引号可以。

来自bash文档:

3.1.2.2单个报价

将字符用单引号括起来('(可保留文字引号中每个字符的值。一句话可能不会出现在单引号之间,即使前面有反斜杠。

总结一下,您的命令应该是这样的:

kubectl exec -ti firstpod -- bash -c 'ls; echo $?'

使用POSIX shelleval命令99.999%的时间是错误的。即使您在这个问题中忽略了Kubernetes的存在。问题中的问题是,kubectl命令正在运行kubectl命令的shell中扩展$resultCmd的定义。特别是由于您使用了双引号。该交互式外壳不知道CCD_ 8在您的";"清单";文件所以这个shell什么都不替换$resultCmd

感谢Kurtis Rader和Thomas的回答。

当我在$之前时,它也起作用?带有反斜杠:

kubectl exec -ti firstpod -- bash -c "ls; echo $?"

相关内容

  • 没有找到相关文章

最新更新