如果程序失败,powershell 脚本将停止(如 bash `set -o errexit`)

Jam*_*979 2 bash powershell

如果程序失败,是否有一个优雅的 Powershell 脚本设置可以退出正在运行的 Powershell 脚本(或 shell 实例)?

我正在想象类似 Bash 功能set -o errexit(或set -e)但用于 Powershell 的东西。在该功能中,如果 bash 脚本中的程序失败(进程返回代码不是0),则 bash shell 实例会立即退出。

在 powershell 中,脚本可以检查$LastExitCode. 但是,对于每个程序调用来说,这变得很麻烦。也许powershell有一个功能可以自动检查程序返回码并做出反应。

在脚本中解释

Set-Powershell-Auto-Exit 'ProgramReturnCode'  # what should this be?
& program.exe --fail  # this program fails with an error code
& foo.exe             # this never runs because script has exited
Run Code Online (Sandbox Code Playgroud)

mkl*_*nt0 6

不幸的是,从 PowerShell Core 7.0.0-preview.3 开始,PowerShell无法外部程序报告非零退出代码时自动退出脚本。

  • 增加的支持正在讨论这个RFC建议

  • 对于PowerShell的本地命令(小命令,脚本,函数),$ErrorActionPreference = 'Stop'可以使用,在退出代码哪些结果1

    • 如果您需要更多地控制报告的退出代码,请参阅此答案
    • 有关 PowerShell 如何向外界报告退出代码的概述,请参阅此答案
  • 目前,您必须明确测试$LASTEXITCODE -eq 0 并根据此采取行动,但作为一种解决方法,您可以对所有外部程序调用使用辅助函数,如本答案所示。