在Elixir中使用System.cmd / 3

时间:2017-04-15 09:12:11

标签: erlang elixir phoenix-framework

可能是一个天真的问题,

我在红宝石中得到了这个

system(ansible-playbook -i #{ip_address}, #{file_to_run}")
system(sudo chmod -R ugo+rw /etc/ansible)

尝试使用System.cmd / 3

的差异重现此问题
System.cmd("sudo chmod -R ugo+rw /etc/ansible",[],[])

获得

 (ErlangError) erlang error: :enoent

请问我该怎么纠正?

1 个答案:

答案 0 :(得分:4)

命令的每个参数必须作为单独的字符串给出,作为第二个参数传递给System.cmd/3

System.cmd("sudo", ["chmod", "-R", "ugo+rw", "/etc/ansible"])

如果所有参数都是文字字符串而且它们都不包含空格,您也可以使用~w sigil:

System.cmd("sudo", ~w(chmod -R ugo+rw /etc/ansible))

由于System.cmd/3具有第三个参数的默认值,您可以省略它,就像我上面所做的那样。