什么是Windows命令shell相当于Bash的`true`命令?

And*_*art 13 git bash shell cmd

我编写了一个Vim插件,用于运行外部命令.我运行的两个命令是diff,grep在"正常"操作期间,每个命令都可以使用非零退出代码退出.

(diff当它找到差异时grep退出退出代码1,当找不到匹配时退出退出代码1.)

出于我的Vimscript的目的,我需要从这些命令返回退出代码0.到目前为止,我正在构建这样的命令:

diff a b || true
Run Code Online (Sandbox Code Playgroud)

和:

grep foo bar || true
Run Code Online (Sandbox Code Playgroud)

这适用于OS X,它显然适用于一些Windows用户.但是,当我通过VirtualBox在OS X上运行Windows 7时,使用Git安装程序安装的Bash,我收到错误消息:

'true'不被识别为内部或外部命令,可操作程序或批处理文件.

在Windows上使用的正确的successful-no-op命令是什么?

che*_*ner 10

true大致相当于(exit 0)(括号创建一个以状态0退出的子shell,而不是退出当前的shell.

  • 这在Win 10上不起作用.当调用`(exit 0)`时,无论是单独调用还是因为失败的命令失败,shell都会退出. (7认同)
  • @chepner:尚不完全清楚,但是我相信OP正在Windows cmd外壳中寻找相同的东西。如果OP使用bash,则无需更换。bash作为内置命令具有“ false”和“ true”,但这不是bash错误消息。(我不知道`(cmd`)中的((exit 0)`是做什么的。) (3认同)
  • 这个答案是错误的,“cmd”中的括号不会分叉任何内容。`(exit 0)` 将导致脚本退出 (3认同)
  • 在 Win 10 上这样做,终端突然关闭,感觉就像 mIRC 上的 n00b,当他们询问如何更改字体颜色时,一些 smarta** 回答了 ALT+F4。“Tibo 已离开聊天室”。 (2认同)

Pet*_*alo 10

cd .
Run Code Online (Sandbox Code Playgroud)

也设置%ERRORLEVEL%为 0,但运行速度更快,写入时间也比 短一些ver>nul。例子:

mkdir . 2>nul || cd .
Run Code Online (Sandbox Code Playgroud)


use*_*683 8

VER>NUL
Run Code Online (Sandbox Code Playgroud)

适合我.

例如,

MKDIR . || VER>NUL
Run Code Online (Sandbox Code Playgroud)

发出错误消息,但设置%ERRORLEVEL%为0.


Von*_*onC 5

上下文是一个 Windows cmdshell(由git-cmd.bat脚本使用):

遵循“在批处理调用之间使用操作符时,使用where退出批处理就像命令成功完成一样EXIT /B XX>=1&&||”,您可以在路径中定义一个true.bat文件:

@%COMSPEC% /C exit 1 >nul
Run Code Online (Sandbox Code Playgroud)