如何防止使用 fc 编辑的命令执行

如何防止使用 fc 编辑的命令执行

我已FCEDIT设置为vim。如果我调用fc命令,它将打开vim临时文件,并且该文件的内容将是历史记录中最后执行的命令。

问题是,即使我不保存就退出,命令仍然会执行。例如:

$ printf "\nHelloAskubuntu\n\n"

HelloAskubuntu

$ fc # opens vim, I do :q!
printf "\nHelloAskubuntu\n\n"

HelloAskubuntu

我该如何避免这种情况?

答案1

fc如果编辑器命令未成功退出,则不会执行该命令。在 Vim 中,有一个命令可以强制执行此操作:cq

                                                        :cq :cquit
:cq[uit][!]             Quit Vim with an error code, so that the compiler
                        will not compile the same file again.
                        WARNING: All changes in files are lost!  Also when the
                        [!] is not used.  It works like ":qall!" :qall,
                        except that Vim returns a non-zero exit code.

因此,当您不想运行命令时,请使用:cq退出 而不是:q!。如果您不做任何更改,可能可以让 Vim 执行此操作,但与仅使用 相比,这可能更令人讨厌:cq

答案2

发生这种情况是因为内容已存储在临时文件中/tmp/bash-fc-*。直接关闭它,fc无论如何都会运行该 shell。

我可以在 Ubuntu 16.04 中测试一种有效的方法。

  1. 创建代理命令(新编辑器)

    sudo vim /usr/local/bin/vim2
    

    让它打开该文件,然后将其清空到磁盘上。因此,如果您不保存,则vim内容仅在其中,不会运行任何内容vimfc

    #!/bin/sh
    
    sh -c "sleep 1; echo -n ''>$1" &
    vim $1
    

    修复权限

    sudo chmod +x /usr/local/bin/vim2
    
  2. 设置FCEDITvim2或暂时测试export FCEDIT=vim2

唯一的希望是你不要比我快,vim在1秒过去之前关闭。

相关内容