kubernetes 在环境中执行命令。带有 eval 的变量
kubernetes execute a command in a env. varible with eval
我想在容器中执行一个命令(假设为 ls)然后用 echo $? 读取退出代码
kubectl exec -ti mypod -- bash -c "ls; echo $?"
不起作用,因为它 return 是我当前 shell 的退出代码,而不是容器之一。
所以我尝试在清单中定义的环境变量上使用 eval :
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- container2
image: varunuppal/nonrootsudo
env:
- name: resultCmd
value: 'echo $?'
然后 kubectl exec -ti mypod -- bash -c "ls;eval $resultCmd"
但是 eval 命令没有 return 任何东西。
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**
我怎样才能让它发挥作用?
提前致谢,
99.999% 的情况下,使用 POSIX shell eval
命令是错误的。即使你在这个问题中忽略了 Kubernetes 的存在。您问题中的问题是您的 kubectl
命令正在扩展 shell 中 $resultCmd
的定义,您 运行 kubectl
命令。特别是由于您使用 double-quotes。该交互式 shell 不知道您的“清单”文件中 $resultCmd
的定义。因此 shell 将 $resultCmd
替换为空。
发生这种情况是因为您使用双引号而不是单引号。
单引号不能替代任何东西,但双引号可以。
来自 bash 文档:
Enclosing characters in single quotes ('
) preserves the literal
value of each character within the quotes. A single quote may not
occur between single quotes, even when preceded by a backslash.
总而言之,您的命令应该如下所示:
kubectl exec -ti firstpod -- bash -c 'ls; echo $?'
感谢 Kurtis Rader 和 Thomas 的回答。
当我在 $?带反斜杠 :
kubectl exec -ti firstpod -- bash -c "ls; echo $?"
我想在容器中执行一个命令(假设为 ls)然后用 echo $? 读取退出代码
kubectl exec -ti mypod -- bash -c "ls; echo $?"
不起作用,因为它 return 是我当前 shell 的退出代码,而不是容器之一。
所以我尝试在清单中定义的环境变量上使用 eval :
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- container2
image: varunuppal/nonrootsudo
env:
- name: resultCmd
value: 'echo $?'
然后 kubectl exec -ti mypod -- bash -c "ls;eval $resultCmd"
但是 eval 命令没有 return 任何东西。
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**
我怎样才能让它发挥作用? 提前致谢,
99.999% 的情况下,使用 POSIX shell eval
命令是错误的。即使你在这个问题中忽略了 Kubernetes 的存在。您问题中的问题是您的 kubectl
命令正在扩展 shell 中 $resultCmd
的定义,您 运行 kubectl
命令。特别是由于您使用 double-quotes。该交互式 shell 不知道您的“清单”文件中 $resultCmd
的定义。因此 shell 将 $resultCmd
替换为空。
发生这种情况是因为您使用双引号而不是单引号。 单引号不能替代任何东西,但双引号可以。
来自 bash 文档:
Enclosing characters in single quotes (
'
) preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash.
总而言之,您的命令应该如下所示:
kubectl exec -ti firstpod -- bash -c 'ls; echo $?'
感谢 Kurtis Rader 和 Thomas 的回答。
当我在 $?带反斜杠 :
kubectl exec -ti firstpod -- bash -c "ls; echo $?"