5

在 bash 和 CMD 中,您可以rm not-exists && ls将多个命令串在一起,每个命令只有在前面的命令成功时才会有条件地运行。

在 powershell 中,您可以执行此操作rm not-exists; ls,但ls即使rm失败,也将始终运行。

如何轻松复制 bash 和 CMD 的功能(在一行中)?

4

2 回答 2

5

默认情况下,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

于 2013-02-27T01:40:00.557 回答
0

要检查 powershell 命令的退出代码,您可以使用$?.

例如,以下命令将尝试删除not-exists,如果成功,它将运行ls.

rm not-exists; if($?){ ls }
于 2013-02-27T00:02:43.807 回答