bashとCMDrm not-exists && ls
では、複数のコマンドをつなぎ合わせることができます。各コマンドは、前のコマンドが成功した場合にのみ条件付きで実行されます。
PowerShellでは実行できますがrm not-exists; ls
、失敗した場合ls
でも常に実行されrm
ます。
bashとCMDが行う機能を(1行で)簡単に複製するにはどうすればよいですか?
bashとCMDrm not-exists && ls
では、複数のコマンドをつなぎ合わせることができます。各コマンドは、前のコマンドが成功した場合にのみ条件付きで実行されます。
PowerShellでは実行できますがrm not-exists; ls
、失敗した場合ls
でも常に実行されrm
ます。
bashとCMDが行う機能を(1行で)簡単に複製するにはどうすればよいですか?
Powershell のほとんどのエラーは、デフォルトで「非終了」です。つまり、エラーが発生してもスクリプトの実行が停止することはありません。そのためls
、コマンドでエラーが発生した後でも実行されますrm
。
ただし、この動作はいくつかの方法で変更できます。$errorActionPreference
変数 (例: )を使用してグローバルに変更したり、すべてのコマンドレットに共通$errorActionPreference = 'Stop'
のパラメーターを設定して特定のコマンドに対してのみ変更したりできます。-ErrorAction
これは、あなたにとって最も理にかなったアプローチです。
# 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 }