使用touch和vi?

Faw*_*wix 54 shell vi touch

在编辑之前使用触摸创建文件是否有好处..例如:

touch foo
vi foo
Run Code Online (Sandbox Code Playgroud)

还是直接把它交给编辑器?喜欢:

vi foo
Run Code Online (Sandbox Code Playgroud)

我看到很多使用前者(touch然后vi)的教程。

Dop*_*oti 109

touch编辑文件首先确认您确实有能力创建文件,而不是在编辑器中浪费时间只是为了发现文件系统是只读的或其他一些问题。

  • `touch` 可能会失败,而 `vi` 的 `:w!` 会成功(例如,如果 `file` 存在但你不是它的所有者并且没有写访问权限,而你有写访问权限)到当前目录)。相反,`touch` 可能会成功,但`vi` 的`:w` 或`:w!` 可能会失败,如果您是文件的所有者,但没有对该文件或当前目录的写访问权限(您'可以用`:!chmod +w %` 解决它(一些`vi` 实现如`vim` 可以在`​​:w!` 上自动完成))。 (26认同)
  • 或者,你可以在启动 `vi` 后做 `:w` 的第一件事。(如果你想让它可执行,还有 `:chmod +x %`) (12认同)
  • `touch` 允许你在编辑之前执行 `chmod +x`,如果你正在编写一个 `#!/bin/bash` shell 脚本,这将是有意义的。 (6认同)
  • Vim / vi 非常清楚地说明你是否打开了一个你没有写入权限的文件:`"foo" [readonly]`。再次进入插入模式时:`警告:更改只读文件。` (4认同)

ami*_*sax 24

除了给出的答案之外,touch 的一个优点是,在您触摸它时编辑同一文件的任何其他用户/终端,当他们尝试保存任何更改时都会收到警告。

WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?
Run Code Online (Sandbox Code Playgroud)

即使您本身没有进行任何更改并且只触及文件,这也会提醒他们。


Pes*_*hke 19

除了接受的答案:

值得注意的touch是用于更新文件时间戳。如果您touch在存在的文件上使用,则它将文件时间戳更新为当前日期和时间。如果文件不存在,它会创建一个以当前日期和时间为时间戳的空文件。

vi另一方面,除非您写入新文件,否则不会创建新文件。

例如,如果我输入vi test.txt,输入一些注释,然后输入:q!; test.txt不会存在。


Ada*_*atz 7

没有touch,新文件将不存在,直到您告诉vi写它。

考虑一个多用户系统(也许您在一个由许多系统共享的网络安装文件系统上,每个系统都有许多用户)。运行touch将确保您拥有该文件(并且您可以写入该文件)甚至更新时间戳。另一个想要创建此类文件的用户将看到您拥有它。如果它已经存在并且另一个用户想要删除或替换它,他们会看到它最近被修改过,并且可能会三思而后行。