在Elixir中运行shell命令
我想通过我的Elixir代码执行一个程序。 调用给定string的shell命令的方法是什么? 有什么不是平台特定的吗?
下面是如何执行一个没有参数的简单shell命令:
System.cmd("whoami", []) # => {"lukas\n", 0}
查看关于System
的文档以获取更多信息。
你可以看看Erlang的OS模块 。 例如cmd(Command) -> string()
应该是你正在寻找的。
“devinus / sh”库是运行shell命令的另一个有趣的方法。
我不能直接链接到相关的文档,但它在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