为什么在交互式kubectl bash会话中缺少空格/换行符

为什么在交互式kubectl bash会话中缺少空格/换行符,bash,kubernetes,Bash,Kubernetes,我已通过以下方式连接到K8s群集内的容器: kubectl -n <namespace> exec -ti <pod> -- bash 而不是: var1=value var2=value var3=value 对于cat/proc/1/cmdline,当输出为 commandarg1arg2 而不是 command arg1 arg2 是什么原因导致输出中省略了换行符和空格,以及如何进行更正?环境的各个部分不能用换行符分隔,因为换行符可能是环境字符串本身的一部分

我已通过以下方式连接到K8s群集内的容器:

kubectl -n <namespace> exec -ti <pod> -- bash
而不是:

var1=value
var2=value
var3=value
对于
cat/proc/1/cmdline
,当输出为

commandarg1arg2
而不是

command arg1 arg2

是什么原因导致输出中省略了换行符和空格,以及如何进行更正?

环境的各个部分不能用换行符分隔,因为换行符可能是环境字符串本身的一部分。想象一个名为X的环境变量,其中它的值为
AB\nY=Z
。你无法将它与有两个变量X和Y的情况区分开来

环境管理的核心是系统调用,例如以C语言表示的系统调用。环境变量的值是C字符串,即以NUL字节终止的字节序列。事实上,NUL是环境变量值中唯一不允许的值


因此,
cat
显示的是环境定义,用NUL字节分隔。

环境的各个部分不能用换行符分隔,因为换行符可能是环境字符串本身的一部分。想象一个名为X的环境变量,其中它的值为
AB\nY=Z
。你无法将它与有两个变量X和Y的情况区分开来

环境管理的核心是系统调用,例如以C语言表示的系统调用。环境变量的值是C字符串,即以NUL字节终止的字节序列。事实上,NUL是环境变量值中唯一不允许的值


因此,您的
cat
向您显示的是环境定义,由NUL字节分隔。

我想问一下,为什么
cmdline
文件中的空格没有显示,但意识到命令和参数本身很可能被视为以null结尾的字符串,因此输出。您可以使用
cat/proc/1/cmdline | xargs-0 echo
将其转储(使用
-n1
,一行一个字)
xargs-0
不是POSIX标准的一部分,但GNU工具和BusyBox都支持它。@DavidMaze工作起来很有魅力。谢谢我想问一下,为什么
cmdline
文件中的空格没有显示出来,但我意识到命令和参数本身很可能被视为以null结尾的字符串,因此是输出。您可以使用
cat/proc/1/cmdline | xargs-0 echo
转储它(使用
-n1
,一个字一行)
xargs-0
不是POSIX标准的一部分,但GNU工具和BusyBox都支持它。@DavidMaze工作起来很有魅力。谢谢
command arg1 arg2