シェルスクリプトが苦手なので、いつもElixirで気軽にスクリプトを書いています。
escriptで実行ファイルを作る方法がありますが、もっと簡単に気軽にやりたいのです。
論よりRUN
toukon.exs
ファイルを作る
❯ echo 'IO.puts("闘魂🔥")' > toukon.exs
闘魂🔥
を表示するElixirコードが書かれたファイルが出来ました。早速elixir
コマンドで実行してみたいと思います。
注意:サンプルコードにある❯
はコマンド入力待ち状態であることを示す表示(コマンドプロンプト)です。コピーするときはそれを取り除いてください。
elixir
コマンドで実行
❯ elixir --help
Usage: elixir [options] [.exs file] [data]
...
❯ elixir toukon.exs
闘魂🔥
闘魂が燃えました。
ファイル名で実行
試しにシェルスクリプトみたいにファイル名をコマンドとして使えるようにします。
何も準備せずにやるとエラーが出ます。順番に対処していきます。
エラー1: permission denied
ファイルを実行する権限が必要です。
❯ ./toukon.exs
zsh: permission denied: ./toukon.exs
chmodでファイルへのアクセス権を変更します。
❯ chmod a+x ./toukon.exs
エラー2: syntax error
ElixirコードがElixirコードとして認識されていないようです。
ファイルを実行する環境にElixirコードを実行したいとお願いする必要があります。
❯ ./toukon.exs
./toukon.exs: line 1: syntax error near unexpected token `"闘魂🔥"'
./toukon.exs: line 1: `IO.puts("闘魂🔥")'
スクリプトファイルにshebangを追加して起動時にスクリプトを読み込むインタプリタを指定します。
Elixirのインタプリタを使いたいので以下のようにおまじないを書きます。
#!/usr/bin/env elixir
IO.puts("闘魂🔥")
お気に入りのテキストエディターで直接編集した方が早いかもしれませんが、以下のようなコマンドでもファイルの中身を入れ替えることができます。
❯ cat <<-EOF > ./toukon.exs
#!/usr/bin/env elixir
IO.puts("闘魂🔥")
EOF
再度あらためてファイルを実行してみます。
❯ ./toukon.exs
闘魂🔥
闘魂が燃えました。
Mix.install
Mix.install/2を用いて、Elixirスクリプトの中で直接Elixirパッケージをインストールすることも可能です。
❯ cat <<-EOF > ./weather.exs
#! /usr/bin/env elixir
Mix.install [{:req, "~> 0.3.0"}]
weather =
case Req.get!("https://wttr.in?format=3") do
%{status: 200, body: body} -> body
_ -> "error😭"
end
IO.puts(weather)
EOF
❯ chmod a+x ./weather.exs
❯ ./weather.exs
Washington, District of Columbia, United States: ⛅️ +56°F
闘魂に関してはこの記事がおすすめです。職種を問わずひらめきが得られると思います。
ご参考までに