Sudoedit Vim 强制写入(更新)而不退出

Ben*_*Ben 5 vim sudoedit

我正在用 Vim 编写一些脚本,我刚刚开始使用sudoedit.

问题是,当我:w写入临时文件时,除非我退出编辑器,否则无法对脚本进行任何测试。

我怎样才能强制更新原件,或者我错过了重点sudoedit

jof*_*fel 11

sudoedit允许您使用在您自己的用户 ID 上运行的编辑器来编辑文件。它将文件复制到一个临时文件,然后您的编辑器可以写入该文件。一旦编辑器关闭,编辑过的文件就会被复制回来。

没有内置的可能性在编辑器仍在运行时自动写回更改。

所以你需要

  • 在另一个用户 ID 上运行编辑器(例如sudo vi /file/to/edit
  • 将文件手动复制回(单独的)shell ( sudo cp /tmp/... /file/to/edit) 或从 vim 内部复制:!sudo cp % /file/to/edit。在 vim 中,您还可以:sh使用 Ctrl+Z启动 shell或将 vim 置于后台,然后使用fg.
  • 使用/sf/ask/182054841/
  • 创建您自己的版本,sudoedit在临时文件更改后立即将更改写回。这应该可以通过一些脚本轻松实现。Inotify 可以帮助您检测更改(例如参见Can a bash script be hooked to a file?


msw*_*msw 5

你错过了 sudoedit 的重点,但手册没有解释它,所以不要担心。

大多数编辑器都有 shell 转义,例如:shell在 vim 中,它允许您获得 root shell,即使您在 sudo 下可能没有这样的权限。这称为“权限提升”,是一件坏事。

sudoedit命令相当于:

# cp source-file /tmp/some-temporary-name
$ ${EDITOR} /tmp/some-temporary-name
# cp /tmp/some-temporary-name source-file
# rm /tmp/some-temporary-name
Run Code Online (Sandbox Code Playgroud)

请注意,编辑器以您的身份运行,而不是以 root 身份运行,因此您不能使用该编辑器进行权限提升。

如果您拥有非常宽松的 sudo 权限(根据发行版在单用户计算机上经常出现这种情况),您可以

$ sudo vim source-file
Run Code Online (Sandbox Code Playgroud)

得到你想要的行为。