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

问题描述 投票:0回答:5

我跑步

kubectl edit deployment

更改我的其中一个 Pod 的版本(此命令在我的文本编辑器中打开一个临时文件,然后我通常编辑并关闭此临时文件),甚至在我在文本编辑器中close此临时文件之前,我可以看到在我的 bash 中遵循以下注释。

Edit cancelled, no changes made.

在我安装fish之前一切都好,我尝试切换到bash,但也没有帮助。

我该如何修复它?

shell kubernetes sh fish
5个回答
23
投票

这样的事情很可能是由于它打开了一个分叉而不是留下来的编辑器造成的。

这意味着您需要将 $EDITOR 设置为等待的编辑器。例如。

nano
vim
emacs
应该有效,例如如果您使用 sublime text,则必须使用
subl -w
明确告诉它等待。

目前还不清楚您正在运行哪个 shell。如果是 bash,则运行

export EDITOR="subl -w"
,在 Fish 中运行
set -gx EDITOR subl -w
(如果您使用 Fish
,则运行 
"subl -w"< 3.0).


9
投票

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

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

最好依赖 $KUBE_EDITOR 变量。例如,对于一次性使用,您可以尝试:

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

(请参阅编辑资源


5
投票

使用 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

所以基本上对保存在

apply
 中的文件使用 
/tmp/<file.yaml>


2
投票

当 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

0
投票

我有同样的问题,但编辑器的类型不是问题,问题是你在编辑 yaml 文件时需要小心,因为缩进中的任何更改都不会保存我正在更改版本的文件nginx x 图像,当我在 nginx 之后输入标签:1.16 时,图像位置发生了变化,因此我尝试将其返回到原始位置,文件确认我的编辑成功

© www.soinside.com 2019 - 2024. All rights reserved.