Elixir からシェルコマンドを実行する
System.cmd/1 で elixir 上からシェルコマンドが実行できる.
試してみよう.
$ iex iex(1)> IO.puts System.cmd("ls") LICENSE README.md ebin lib mix.exs test :ok
ところでコマンドの正常/異常終了を計測するのに exit status ( シェルスクリプトだと $?
で取るアレ ) を取ることはできないのだろうか?
一応 (“ls; echo $?”) とすれば,最後にステータスコードを取れる
iex(1)> IO.puts System.cmd("ls; echo $?") LICENSE README.md ebin lib mix.exs test 0 :ok
とはいえ,もうちょっとまともな方法があるんじゃないだろうか. タプルの 1 番目に文字列,2 番目にステータスコードのようなものを想像している. 探してみよう.
elixir のソース を見たところ System.cmd/1
は erlang の :os
をそのまま利用しているようだ.
そこで erlang の :os
のドキュメント Erlang – os を眺めてみる.……なさそうですなあ.
erlang のメーリングリストを検索してみると, os:cmd/1 with return code というスレッドに書いてあった, erlexec というライブラリを使えばできそうな気はする. (試してはいない)
Elixir から試したりいい方法がありそうだったらそのうち書くかもしれない.