【问题标题】:What's the Windows command shell equivalent of Bash's `true` command?什么是 Windows 命令 shell 等效于 Bash 的 `true` 命令?
【发布时间】:2014-02-26 16:04:06
【问题描述】:

我编写了一个 Vim 插件,它可以运行外部命令。我运行的两个命令是diffgrep,它们可以在“正常”操作期间以非零退出代码退出。

diff 发现差异时以退出代码 1 退出,grep 未找到匹配时以退出代码 1 退出。)

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

diff a b || true

还有:

grep foo bar || true

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

'true' 不是内部或外部命令、可运行程序或批处理文件。

在 Windows 上使用的正确成功无操作命令是什么?

【问题讨论】:

  • 作为一个小问题,truefalse 是向操作系统返回 0(成功)和非零(失败)的命令。需要实际的 command 是因为,据我所知,传统的 shell 没有文字方式来指定布尔值。
  • 它们并不是真正需要的,因为它们本身分别与(exit 0)(exit 1) 相同。
  • @chepner 这为我解决了问题;谢谢!我现在使用diff a b || exit 0。如果您可以添加您的评论作为答案,我将能够接受它。
  • 当您说“在 Windows 上”时,您是指在 Windows 下运行 bash,还是运行 Windows cmd shell?答案很可能完全不同。 bash 有 falsetrue 作为内置命令,“'true' is not recognized as an internal or external command, operable program or batch file.”是 Windows cmd 错误消息,而不是 bash 错误消息。

标签: git bash shell cmd


【解决方案1】:
VER>NUL

为我工作。

例如,

MKDIR . || VER>NUL

发出一条错误消息,但它将%ERRORLEVEL% 设置为0。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这在 Win 10 上不起作用。当调用 (exit 0) 时,无论是单独调用还是由于失败的命令失败,shell 都会退出。
    • 如果为真,这似乎是 Window 的 bash 实现中的一个相当重要的错误。
    • @chepner:这还不完全清楚,但我相信 OP 正在寻找 Windows cmd shell 中的等效项。如果 OP 使用 bash,则无需更换; bash 有 falsetrue 作为内置命令,这不是 bash 错误消息。 (我不知道(exit 0)cmd 中做了什么。)
    • 在 Win 10 上做到这一点,终端突然关闭,当他们要求一种方法时,感觉就像 mIRC 上的 n00b。更改字体颜色和一些 smarta** 回答 ALT+F4。 “Tibo 离开了聊天室”。
    • 这个答案是错误的,cmd 中的括号不要分叉任何东西。 (exit 0) 将导致脚本退出
    【解决方案3】:

    上下文是 Windows cmd shell(由 git-cmd.bat script 使用):

    在“Exiting batch with EXIT /B X where X>=1 acts as if command completed successfully when using && or || operators between batch calls”之后,您可以在路径中定义一个 true.bat 文件:

    @%COMSPEC% /C exit 1 >nul
    

    【讨论】:

    • Win10 64Bit:此解决方案适用于我,接受的答案无效。
    【解决方案4】:
    cd .
    

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

    mkdir . 2>nul || cd .
    

    【讨论】:

    • 这是一个聪明的解决方法。以及如何使用echo SuppressError
    猜你喜欢
    • 2022-08-02
    • 2022-02-06
    • 1970-01-01
    • 2011-01-07
    • 2011-10-16
    • 2011-11-03
    • 2012-09-01
    • 1970-01-01
    • 2018-12-01
    相关资源
    最近更新 更多