2020/07/08

コマンドプロンプト、PowerShell、zshなどでの終了コード(ExitCode)の確認方法まとめ


概要


コードの静的解析や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で実際に動かせるサンプルはこちら。

2020/01/09

Go言語のCLIアプリを作りながらCircleCIでCI/CDを実践してみた

概要

以下を目標に、Go言語で簡単なCLIツールを作りながらCI/CDを実践してみました!
  • CIでtestやbuildを実行して、READMEにバッジを貼る
  • テストカバレッジ計測し、READMEにバッジを貼る
  • gitでtagがついたら、バイナリを作ってgithubのリリースページにアップする
以下のリポジトリが成果物です。

A repository to play around with using CircleCI.

github.com/kemokemo/try-circle-ci
実践内容をハンズオンっぽくまとめると共に、ポイントやお世話になった記事をあわせて紹介したいと思いますʕ◔ϖ◔ʔ

2019/09/01

[食べ物]山芳の「梅わさビーフ」食べてみたっ!(*´ω`*)

こ、これは!(゚A゚;)

昨日、近所のファミマで刺激的な食べ物をみつけました!(・∀・)

\\梅わさビーフ//

さっそく食べてみましょう☆

2019/08/13

HugoとGitLab CIで手軽に素早くサイトを公開する

背景

少し前から、Markdown文書から静的サイトを生成したいという欲求がありました。主な理由は以下です。
  • ソースがテキストなのでdiff形式で簡単に差分を可視化できる。
    • 変更点を伝えなきゃいけない相手と共有しやすい。
  • 好きなエディタ(VSCode、Emacs、Vim etc…)で編集できる。
    • 作業効率が良くなる
静的ジェネレータと言えばGitHub PagesとJekyllが有名ですが、今回はHugoを使います。以下のキャッチコピーにしびれたのと、実際に使ってみるとキャッチコピー通り恐ろしく爆速だったからですヽ(=´▽`=)ノ
Install in seconds, build in milliseconds.
https://gohugo.io/

2019/06/29

SourceTree 管理のリポジトリをVSCodeやIntelliJで開く!

SourceTree

SourceTreeいいですよね。
自分がGitにすんなり馴染めたのも、このSourceTreeのおかげでした。Atlassianさんありがとう!

OSSで開発しているとGitでのバージョン管理は当たり前ですし、複数のリポジトリでソースコードを読みながら開発することも少なくありません。SourceTreeを使うと、多数のリポジトリを視覚的に管理しながらキーワードで検索することもできて便利です。

Repositories list of the SourceTree

見つけたリポジトリをそのままVScodeやIntelliJで開けると、テンポよく開発できて良いです。
というわけで、今日はそのためのちょっとした設定のお話をしますヽ(=´▽`=)ノ