在Elixir中运行shell命令

我想通过我的Elixir代码执行一个程序。 调用给定string的shell命令的方法是什么? 有什么不是平台特定的吗?

下面是如何执行一个没有参数的简单shell命令:

System.cmd("whoami", []) # => {"lukas\n", 0} 

查看关于System的文档以获取更多信息。

你可以看看Erlang的OS模块 。 例如cmd(Command) -> string()应该是你正在寻找的。

“devinus / sh”库是运行shell命令的另一个有趣的方法。

https://github.com/devinus/sh

我不能直接链接到相关的文档,但它在System模块下

 cmd(command) (function) # Specs: cmd(char_list) :: char_list cmd(binary) :: binary Execute a system command. Executes command in a command shell of the target OS, captures the standard output of the command and returns the result as a binary. If command is a char list, a char list is returned. Returns a binary otherwise. 

System.cmd / 3似乎接受命令的参数作为列表,并且当您尝试偷偷在命令名称中的参数时不高兴。 例如

 System.cmd("ls", ["-al"]) #works, while System.cmd("ls -al", []) #does not. 

实际上在System.cmd / 3调用中发生了什么:使用第一个参数的os.find_executable / 1,对于类似于ls的东西来说工作得很好,但是对于ls -al例如返回false。

erlang调用期望char列表而不是二进制,所以你需要像下面这样的东西:

 "find /tmp -type f -size -200M |xargs rm -f" |> String.to_char_list |> :os.cmd