見出し画像

curlで取得したshellスクリプトに引数を渡して実行したい

いちいち長ったらしいコマンドオプションを使うのが面倒くさいので、普段は`~/run.sh`みたいなファイルを作って実行しています。
が、この方法はローカル環境で完結してしまうので、この度WSL2に上げた記念に今年リリースされた新しいディストリビューションを入れたので、環境を気にせずに使う方法はないか考えたところ、curlで取得して実行すれば解決できました。

この記事では、引数を渡して環境に依存しないように実行する方法を記しています。

# 対象者

・コマンドコンソールに抵抗がない
・複数の環境でshellコマンドを実行したい(環境移行など)

# 使ってみる

GitHubアカウントがあれば普通にshファイルを作るだけです。
今回は拙作のupdate_CHANGELOG.shを用いて説明します。

## github-changesをインストールする

`npm install github-changes`でインストールできます。

`github-changes -h`が実行できれば大丈夫です。

## curlで実行する

`curl -sf https://raw.githubusercontent.com/shimajima-eiji/Chocolatey/master/wsl/update_CHANGELOG.sh | sh -s -- (ここにオプション)`
を実施します。
オプションはソースコードのcase文を参照してください。

試しに、

`curl -sf https://raw.githubusercontent.com/shimajima-eiji/Chocolatey/master/wsl/update_CHANGELOG.sh | sh -s -- -s Chocolatey`

としてみてください。
カレントディレクトリ(./)にCHANGELOG.mdが生成され、 https://github.com/shimajima-eiji/Chocolatey/blob/master/CHANGELOG.md の内容が得られていると思います。
タイミングによっては、ちょっと多いかもしれませんね。

## 解説:update_changelog.sh

通常、-oと-rを引数に与えれば適切に処理されるようにしています。
-sはこれの簡略系で、リポジトリ(とアカウント名)を指定することで同じ振る舞いをします。

## 解説:curlで実行

`curl (url) | sh -s`でダウンロードしたshellコマンドが実行できます。
これに引数を与えるのが、`--`です。

shコマンドで実行する引数は`--`まで、以降は実行されるコマンドへの引数になります。
なので、`-s`が2つあっても双方に適切に処理された、ということです。

# 反省

やっていることは、github-changesに所定のオプションをつけて実行させているだけですので、ゴテゴテやらなければ普通に手打ちした方が楽です。
あくまで「様々な環境で共通に使えるようにしたい」というのが目的です。

とはいえ、curlコマンドのアドレスを忘れてしまったら結局意味がないので、github-changesのオプションを覚えていればわざわざこういう手間を掛ける必要もないので、頑張り方が違うだけですね。

のむらがあなたの役に立つ記事を書くためのコーヒーを一杯奢ってくれませんか? サポートをすると、のむらの記事を使って、あなたの記事を盛り上げてみませんか? また、有料記事などいただいた収益はすべて、あなたの代わりにアプリやツールを買って色々検証をして記事にするために使っています。