在 bash 和 CMD 中,您可以rm not-exists && ls
将多个命令串在一起,每个命令只有在前面的命令成功时才会有条件地运行。
在 powershell 中,您可以执行此操作rm not-exists; ls
,但ls
即使rm
失败,也将始终运行。
如何轻松复制 bash 和 CMD 的功能(在一行中)?
在 bash 和 CMD 中,您可以rm not-exists && ls
将多个命令串在一起,每个命令只有在前面的命令成功时才会有条件地运行。
在 powershell 中,您可以执行此操作rm not-exists; ls
,但ls
即使rm
失败,也将始终运行。
如何轻松复制 bash 和 CMD 的功能(在一行中)?
默认情况下,Powershell 中的大多数错误都是“非终止的”,也就是说,它们不会导致您的脚本在遇到它们时停止执行。这就是为什么ls
即使在命令出错后也会执行rm
。
不过,您可以通过多种方式更改此行为。$errorActionPreference
您可以通过变量(例如)全局更改它$errorActionPreference = 'Stop'
,或者通过设置参数仅针对特定命令更改它-ErrorAction
,这对所有 cmdlet 都是通用的。这是对您最有意义的方法。
# setting ErrorAction to Stop will cause all errors to be "Terminating"
# i.e. execution will halt if an error is encountered
rm 'not-exists' -ErrorAction Stop; ls
或者,使用一些常见的速记
rm 'not-exists' -ea 1; ls
-ErrorAction
参数说明帮助。类型Get-Help about_CommonParameters
要检查 powershell 命令的退出代码,您可以使用$?
.
例如,以下命令将尝试删除not-exists
,如果成功,它将运行ls
.
rm not-exists; if($?){ ls }