我该如何修复编辑已取消,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 设置为等待的编辑器。例如。 nano
、vim
或 emacs
应该有效,例如如果您使用 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
我运行
kubectl edit deployment
更改我的一个 pods 的版本(这个命令在我的文本编辑器中打开一个临时文件,然后我通常编辑并关闭这个临时文件)甚至在我 关闭之前 我的文本编辑器中的这个临时文件我可以在我的 bash.
中看到以下注释Edit cancelled, no changes made.
在我安装 fish 之前没问题,我尝试切换到 bash 但它也无济于事.
我该如何解决?
像这样的事情很可能是因为它打开了一个 fork off 而不是停留的编辑器。
这意味着您需要将 $EDITOR 设置为等待的编辑器。例如。 nano
、vim
或 emacs
应该有效,例如如果您使用 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