第6章
6.12 ライブラリを見つける
のところ
問題文のModulesAndFunctions-7の回答、オペレーティングシステムのシェルでコマンドを実行するについて
最初のほうの回答がSystem.cmd("date")
となってるがエラーが出てくる
結論から言うと、System.cmd("date", [])
としてやればdateコマンドが実行される
参考: [[Elixir]外部コマンドを叩く] (http://qiita.com/darui_kara/items/755463f2c4769d1777ed)
System.cmd() の引数は2つ
System.cmd("date")
だけiexで実行すると以下のエラーが出てきて
1 2 3 4 5 6
| ** (UndefinedFunctionError) function System.cmd/1 is undefined or private. Did you mean one of: * cmd/2 * cmd/3 (elixir) System.cmd("date")
|
System.cmd/1 (System.cmdについて引数1の関数)は定義されてないかprivateですよってエラーがでる
で、続きにcmd/2またはcmd/3じゃないですか?
ってメッセージに書いてあるので
試してみたらできた
1 2
| iex(55)> System.cmd("date", []) {"2016年 12月 5日 月曜日 14時33分39秒 JST\n", 0}
|
とりあえず空のリストを与えている
これ、第二引数のところでコマンドのオプションを加えてるみたい
なので、以下のように色々オプションを渡してあげれる
1 2 3 4 5 6 7 8 9 10
| iex(53)> System.cmd("date", ["-u"]) {"2016年 12月 5日 月曜日 05時33分26秒 UTC\n", 0} iex(63)> System.cmd("date", ["-u"]) {"2016年 12月 5日 月曜日 05時44分48秒 UTC\n", 0} iex(64)> System.cmd("date", ["-n"]) {"2016年 12月 5日 月曜日 14時44分52秒 JST\n", 0} iex(65)> System.cmd("date", ["-nu"]) {"2016年 12月 5日 月曜日 05時44分54秒 UTC\n", 0} iex(66)> System.cmd("date", ["-n", "-u"]) {"2016年 12月 5日 月曜日 05時45分03秒 UTC\n", 0}
|
ちなみに、cmd/3もあるみたいなので下記のようにもできる
1 2 3 4 5 6 7 8
| iex(56)> System.cmd("date", [], []) {"2016年 12月 5日 月曜日 14時33分42秒 JST\n", 0} iex(57)> System.cmd("date", ["-u"], []) {"2016年 12月 5日 月曜日 05時33分45秒 UTC\n", 0} iex(58)> System.cmd("date", [], ["-u"]) ** (FunctionClauseError) no function clause matching in System.cmd_opts/3 (elixir) lib/system.ex:578: System.cmd_opts(["-u"], [:use_stdio, :exit_status, :binary, :hide, {:args, []}], "") (elixir) lib/system.ex:555: System.cmd/3
|
第三引数だけいれるってのはだめみたい
まだ調べてないのでわからないが、ひとまずこんな風にしてshellコマンドを実行できるっぽい