我正在用 Vim 编写一些脚本,我刚刚开始使用sudoedit
.
问题是,当我:w
写入临时文件时,除非我退出编辑器,否则无法对脚本进行任何测试。
我怎样才能强制更新原件,或者我错过了重点sudoedit
?
jof*_*fel 11
sudoedit
允许您使用在您自己的用户 ID 上运行的编辑器来编辑文件。它将文件复制到一个临时文件,然后您的编辑器可以写入该文件。一旦编辑器关闭,编辑过的文件就会被复制回来。
没有内置的可能性在编辑器仍在运行时自动写回更改。
所以你需要
sudo vi /file/to/edit
)sudo cp /tmp/... /file/to/edit
) 或从 vim 内部复制:!sudo cp % /file/to/edit
。在 vim 中,您还可以:sh
使用 Ctrl+Z启动 shell或将 vim 置于后台,然后使用fg
.sudoedit
在临时文件更改后立即将更改写回。这应该可以通过一些脚本轻松实现。Inotify 可以帮助您检测更改(例如参见Can a bash script be hooked to a file?)你错过了 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)
得到你想要的行为。