为什么在发生任何错误时,以别名“ vi”运行的vim会返回非零退出代码?

不朽的夜晚

在我的系统(Mac OS X)上,vi别名为vim但是,当运行vi为时,其退出代码的行为是不同的:在会话期间发生任何错误时,它将返回一个非零的退出代码,如以下测试所示:

  • 在终端中,使用vim打开任何文件。
  • 做一些编辑。
  • 尝试使用退出:q这将导致错误(自上次更改以来未写入)。
  • 无论如何,请使用:q!退出:wq
  • 键入echo $?在终端中。

如果我vim在第一步中使用打开vim,返回码将为0 ,但如果我使用返回码将为1 vi

这个问题可能是Vi别名为vim的根本原因,但退出代码为1

不朽的夜晚

经过一番搜索,我在vim帮助的第几节中找到了以下注释|posix-compliance|

In 2005 the POSIX test suite was run to check the compatibility of Vim. ...
...
- vi test 310 fails; exit code non-zero when any error occurred?

这使我进入vi的POSIX规范的以下部分

退出状态

应返回以下出口值:

0

成功完成。

> 0

发生错误。

显然,许多实用程序都具有这样的退出状态规范,这通常是非常合理的。但是,不是vi:作为交互式编辑器,某些命令完全有可能导致错误(“发生错误”),但整个编辑器都正常退出(“成功完成”)。因此,根据您的观点,规范本身是模棱两可和/或矛盾的。

显然,编写POSIX测试套件的人认为“成功完成”的定义应该严格:如果发生任何错误,则它不是成功完成。因此vim未能通过测试。

当然,如果将vim的代码称为,则不难修改以符合规范的解释vi由于最新版本的vim似乎没有表现出这种行为,我想Mac OS X的家伙可能自己引入了此补丁程序,以便通过POSIX测试。像这样使用实用程序的任何困难git commit可能是他们最不用担心的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果发生错误,使`find`返回非零退出代码

将Gatsby JS网站部署到Netlify时出现“错误运行命令:构建脚本返回了非零退出代码”

如果发生任何运行时错误,为什么返回垃圾值?

当输入错误时,为什么vba总是返回No Error?

为什么execute()在错误时不返回true?

sbt运行错误:java.lang.RuntimeException:非零退出代码:1

在hackerearth 上运行Python3 程序时出现NZEC(非零退出代码)错误

为什么在SQL中使用别名会返回错误?

为什么不反斜杠产生非零退出代码

为什么当构建退出错误时,来自docker文件的docker构建映像会创建容器?

发生错误时安全退出特定状态

发生错误时如何使Clozure退出

发生错误时停止执行代码(C ++)

为什么我的Perl就地脚本即使失败也会以零退出代码退出?

Openshift-构建错误:非零(13)退出代码

CircleCI对非零退出代码有什么作用?

在TypeScript中,为什么我的类型别名返回错误?

pyvenv-3.4错误:返回非零退出状态1

为什么 Python 的 Logger 在没有错误时返回错误?

为什么 Webpack 5 为性能提示返回非零错误代码?

为什么在Vim中运行C代码会跳过scanf()?

当返回类型实际上是错误时,为什么需要返回一个指针?

当没有错误时,为什么步进功能会取消自身

$ .when()中没有错误时,为什么会触发fail()?

当非承诺引发错误时,为什么 Promise.all 不会拒绝?

为什么出现ArrayList.java NullPointerException错误时,我的代码不使用ArrayList?

当我的lua代码引发错误时,为什么不能捕获luabind :: error异常?

为什么使用列表别名。()选择和重命名data.table的列会返回错误?

为什么数组在发生错误时停止存储?