概要
コードの静的解析やCI/CDでのチェックのためなどで、CLIツールを使うことがあります。
CLIツールを組み合わせてタスクを実行するスクリプト(*.bat、*.ps1、*.shなど)を作る際、処理の成否を終了コード(ExitCode)で判断して条件分岐を行いたい場合がありますが、この終了コードのチェック方法がシェルによって微妙に違っており、毎回調べてしまっておりました。
自分用の備忘録として、情報を整理して記事にします(:3[ふとん]
終了コード確認方法
macOSのzshおよびPowerShellにて終了コード確認 |
コマンドプロンプト
echo %errorlevel%
PowerShell
echo $?
スクリプトの中で直前に実行した処理の成否を確認するなら、後述のbashシェルスクリプトなどと同様に
$?
を指定する。echo $LASTEXITCODE外部スクリプトの呼び出しなどでは使えるけれど、ちょっとややこしいので私はあまり使わないです。詳しくは公式のマニュアルを参照ください。(2020/08/08 改定)
bash、zshなど
echo $?
所見
PowerShellはこれに限らず独自色が強いですね。巷で先人たちが公開してくださっている素晴らしいシェル芸の多くはshやbashを使った内容が多いので、できればWindowsでもWSL2をみんなで導入してシェルスクリプト(*.sh)メインで使えるようになるのが理想だなと思います。
おまけ
golangのコードで外部コマンドを実行した時のExitCodeは、func (*ProcessState) ExitCodeで調べられる。The Go Playgroundで実際に動かせるサンプルはこちら。