将 EDITOR 环境变量设置为冒号 (:) 到无操作编辑器

Setting EDITOR environment variable to colon (:) to no-op editor

是否将 EDITOR 环境变量设置为 : 以表示 Unix 中支持无操作的行为?还是对Git有特殊意义?

我偶然发现了这个将 EDITOR=: 传递给 Git 以阻止任何启动编辑器的尝试的示例:

# Amend the commit, reusing the commit message
EDITOR=: git commit --amend

但请稍等。为什么这样行得通? EDITOR 环境变量应设置为指向 PATH 中的编辑器可执行文件,如 EDITOR=vim 等。在做了一些挖掘之后,我发现 Git 明确检查编辑器值与 : 并且在这种情况下不会启动编辑器。 (有关详细信息,请参阅 commit.c。)

所以回到问题,似乎 Git 支持 : 作为空操作编辑器,它通过特殊的外壳来实现。 : 甚至是 EDITOR 的合法值,还是某些程序支持的约定? (另一种方法是设置 EDITOR=echoEDITOR=touch,以便将编辑器作为 touch FILE 调用,而 FILE 保持不变。)

奖金

使用 : 来表示 EDITOR 的无操作似乎与 : Bash 内置命令的无操作命令等同于 true.巧合?

What is the use case of noop [:] in bash?

: 的使用可能是对 Bourne shell (more reading on that) 的认可,但正如您所注意到的那样,它在 Git 中得到了明确处理。我不知道有什么地方将 EDITOR=: 记录为预期在全球范围内起作用的东西。

Git 对 EDITOR=: 的支持可以追溯到 2007 年:https://github.com/git/git/commit/943316e96ca2dad67086af2f945e42467a27ddd6!