我该如何修复编辑已取消,shell 中未进行任何更改

How can I fix Edit cancelled, no changes made in shell

我运行

kubectl edit deployment

更改我的一个 pods 的版本(这个命令在我的文本编辑器中打开一个临时文件,然后我通常编辑并关闭这个临时文件)甚至在我 关闭之前 我的文本编辑器中的这个临时文件我可以在我的 bash.

中看到以下注释
Edit cancelled, no changes made.

在我安装 fish 之前没问题,我尝试切换到 bash 但它也无济于事.

我该如何解决?

像这样的事情很可能是因为它打开了一个 fork off 而不是停留的编辑器。

这意味着您需要将 $EDITOR 设置为等待的编辑器。例如。 nanovimemacs 应该有效,例如如果您使用 sublime text,则必须使用 subl -w 明确告诉它等待。

目前还不太清楚 shell 您 运行 宁。如果它是 bash、运行 export EDITOR="subl -w",在 fish 运行 set -gx EDITOR subl -w 中(或者 "subl -w" 如果你使用 fish < 3.0)。

@faho 提供的充足答案的改进。

使用 $EDITOR 变量的方法可以实现目标,但会更改默认的 command-line 编辑器。这可能会影响依赖于此设置的其他程序(例如 crontab、edquota)。

最好依靠 $KUBE_EDITOR 变量。例如,对于 one-time 的使用,您可以尝试:

KUBE_EDITOR="nano" kubectl edit deploy/hello-world

(请参阅Editing Resources

使用 vim,当您尝试保存时,它会保存在 /tmp/ 路径中指定的已编辑副本,以及退出编辑器时的错误消息。

这相当于使用 get 资源,在文本编辑器中编辑它,然后应用具有更新版本的资源:

kubectl get deployment my-nginx -o yaml > /tmp/nginx.yaml
vim /tmp/nginx.yaml


kubectl apply -f /tmp/nginx.yaml
deployment.apps/my-nginx configured

然后删除文件

rm /tmp/nginx.yaml

所以基本上在/tmp/<file.yaml>

中保存的文件上使用apply

当您所做的更改未被 kubectl 选中时,也可能会发生此问题,例如。因为 YAML 不正确。

  • 请进行您确定的其他更改。
  • 保存后检查是否仍然出现同样的问题

示例问题复制:

  • spec.selector.app: xxx" 无效,因为它是重复的;
  • 最后一个将保留;第一个将被忽略。
  • 因此,如果您只是添加了第一个 - 它不会进行任何更改。
spec:
  clusterIP: 10.152.183.151
  clusterIPs:
  - 10.152.183.151
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: xxx
    app: rng