【问题标题】:Window shell script return codes窗口 shell 脚本返回码
【发布时间】:2023-03-30 06:48:01
【问题描述】:

是否有一套标准的 Window shell 脚本(*.bat 文件)返回码?我正在寻找类似于 Linux 退出代码的东西,其中 0== 成功和非零 == 失败。 我需要一种以编程方式检查我的 shell 脚本在执行期间是否失败的方法。

【问题讨论】:

    标签: windows shell


    【解决方案1】:

    最常见的做法与 Unix 标准相同,因此返回码(在批处理文件中也称为错误级别)为 0 表示成功,而任何高于 0 的都是错误。

    虽然有许多相关的问题需要寻找 - 请查看本指南:

    Batch Files - Errorlevels

    【讨论】:

      【解决方案2】:

      0 表示成功,非 0 表示失败也是 Windows 批处理命令的惯例。当命令失败时,它会设置 ERRORLEVEL,这是一个可以在批处理文件中测试的特殊变量。

      if errorlevel 1 goto failure
      

      只要您不运行其他命令,错误级别就会传递给运行 .bat 文件的调用者。

      【讨论】:

        【解决方案3】:

        您可以检查错误级别的值。

        IF shell 语句的帮助告诉我以下内容:

        IF [NOT] ERRORLEVEL number command
        
          ERRORLEVEL number Specifies a true condition if the last program run
                            returned an exit code equal to or greater than the number
                            specified.
        

        【讨论】:

          【解决方案4】:

          通常,Windows 实用程序在成功时返回 0,在错误时返回非零值(通过 ERRORLEVEL 变量),就像 Linux 应用程序一样。不幸的是,没有强制执行的官方“标准”,并且并非每个实用程序或脚本都设置错误级别。

          如果您有要测试其返回状态的脚本,请确保该脚本使用 EXIT /B ## 退出,这会导致错误级别设置为 ##

          【讨论】:

            【解决方案5】:

            我更喜欢这种方式:

            [run an exe here]
            
            IF %errorlevel% NEQ 0 (
                CALL :SSH_fail filename.sh %errorlevel%
            )
            
            
            :SSH_fail
                Email.exe "%mailTo%" "%mailProgram% - SSH Failure " "Body: errorlevel:%~2 file name: %~1"
            goto cont
            

            这样我就可以确切地知道错误级别是什么。我认为最多可以有 250 个错误级别。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-07-16
              • 2016-03-14
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多