kubernetes `--dry-运行=client` 和 `--command` 以一种奇怪的方式依赖于命令的排序

kubernetes `--dry-run=client` with `--command` depends on ordering of commands in a weird way

我发现使用 --dry-run=client 创建 yaml 对象描述并提供 --command 仅在提供的参数按非常特定的顺序排列时才有效。

这个有效:

k run nginx --image=nginx --restart=Never --dry-run=client -o yaml --command -- env > nginx.yaml

这不是:

k run nginx --image=nginx --restart=Never --command -- env --dry-run=client -o yaml > nginx.yaml

我觉得有点困惑,因为对我来说,不起作用的版本比起作用的版本直观得多。理想情况下,我认为两者都应该有效。这是有意的行为吗?我找不到任何关于它的文档。

-- 之后的所有内容都是位置参数(直到 > 是 shell 元字符),而不是选项。

Ideally both should work in my opinion.

很遗憾,您提供的命令并不相同。他们也永远不会以同样的方式工作。这是正确的行为。 Double dash (--) 在这里特别重要:

a double dash (--) is used in most Bash built-in commands and many other commands to signify the end of command options, after which only positional arguments are accepted.

所以你不能随意交换“参数”的地方。只有这几个选项可以自由设置

--image=nginx --restart=Never --dry-run=client -o yaml --command

然后你有 -- env(双破折号、space 和另一个命令)。在 --(双破折号和 space)之后只接受位置参数。

此外,> 是 shell 元字符以设置 redirection