有人知道为什么这个会出现空行吗:
kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST
但这个有效吗?
kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'
有人知道为什么这个会出现空行吗:
kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST
但这个有效吗?
kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'
运行成功将取决于您用于kube
的镜像。但通常来说,echo
是一个内置的Bourne shell命令。
使用此命令:
$ kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST
您没有启动Bourne Shell环境,容器中也没有可执行的echo
命令。实际上,kubectl
所做的就是在客户端上运行echo $KUBERNETES_SERVICE_HOST
!您可以尝试运行以下命令:
$ kubectl exec kube -- echo $PWD
你会看到这是客户端的主目录。
而使用这个命令:
$ kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'
您的环境中存在一个可执行文件sh
,这是一种了解给定Kubernetes环境下Pod默认容器中内置的echo
命令的Bourne Shell。
如果有必要,通常情况下可以不使用 sh -c
来实现,另一种方法是:
kubectl exec kube -- env | grep KUBERNETES_SERVICE_HOST
$KUBERNETES_SERVICE_HOST
是由你所运行的shell解释的。而你在该shell中没有设置KUBERNETES_SERVICE_HOST,所以它使用了一个空字符串。kubectl exec kube -- echo '$KUBERNETES_SERVICE_HOST'
通常使用以下命令:
kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST
$KUBERNETES_SERVICE_HOST
将首先被扩展并作为参数提供给echo。在您的环境中,该变量可能未设置,从而产生一个空行。
至于命令:
kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'
在容器中创建了一个shell,并指示 (-c
) 将 'echo $KUBERNETES_SERVICE_HOST'
视为命令字符串。
echo
命令只会在当前 shell 中执行。所以这个命令只会在当前 shell 中显示$KUBERNETES_SERVICE_HOST
。 - Luyang Du