如何修复已取消的修改,shell中未进行任何更改

A. *_*val 3 shell sh fish kubernetes

我跑

kubectl edit deployment
Run Code Online (Sandbox Code Playgroud)

更改我的一个Pod的版本(此命令在文本编辑器中打开一个临时文件,然后我通常会编辑并关闭该临时文件),甚至在我在文本编辑器中关闭该临时文件之前,我也可以在我的拳头。

Edit cancelled, no changes made.
Run Code Online (Sandbox Code Playgroud)

在安装fish之前还可以,然后尝试切换到bash,但它也无济于事。

我该如何解决?

meb*_*s99 8

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

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

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

KUBE_EDITOR="nano" kubectl edit deploy/hello-world
Run Code Online (Sandbox Code Playgroud)

(请参阅编辑资源


fah*_*aho 7

之所以这样,是因为它打开了一个分叉而不是停留的编辑器。

这意味着您需要将$ EDITOR设置为等待的编辑器。例如nanovimemacs应该可以工作,例如,如果您使用崇高的文字,则必须使用subl -w显式告诉它等待。

目前尚不清楚您正在运行哪个shell。如果是bash,请运行export EDITOR="subl -w",以鱼运行set -gx EDITOR subl -w(或者"subl -w"如果您使用的鱼<3.0)。

  • 这适用于 VSCode - `KUBE_EDITOR="code -w" kubectl edit ...` (2认同)

Pet*_*lla 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
Run Code Online (Sandbox Code Playgroud)

然后删除该文件

rm /tmp/nginx.yaml
Run Code Online (Sandbox Code Playgroud)

所以基本上使用apply保存在/tmp/<file.yaml>