erlang – 在Elixir中执行基本shell命令

在学习语言的早期阶段,并通过Elixirsips系列视频进行工作.我继续打击那些被语言变化稍微亵渎的东西.试图围绕这个问题,Google / Github问题跟踪/拖网捕获是让我无处可借.我有这个非常基本的模块,它应该只运行一个shell命令:
defmodule QuickieSynth.sound do
  def command(note) do
    "play -qn synth 2 pluck #{note}"
  end

  def play(note) do
    note |> command |> System.cmd
  end
end

但是,当这个文件被编译并且测试运行时,我得到一个参数错误;公平的 – System.cmd / 1似乎不再是标准库的一部分.

System.cmd / 3在标准lib中,并且阅读文档指示的选项是,很好,可选.所以我传递空的args note |>命令|> System.cmd([]),我得到的是erlang::enoent:再次阅读文档一点更仔细,公正.

所以我尝试使用Erlang的:os.cmd / 1,所以注意|>命令|> :os.cmd,我得到(FunctionClauseError)没有函数子句匹配:os.validate / 1.而我现在被困了

System.cmd / 3似乎接受命令的参数作为列表,并且当您尝试潜入命令名称中的参数时不高兴.例如System.cmd(“ls”,[“-al”])工作,而System.cmd(“ls -al”,[])没有.所以在你的情况下,你可能需要这样的东西:
System.cmd("play",["-qn","synth","2","pluck",note])

实际发生的事情是System.cmd / 3调用:os.find_executable / 1与其第一个参数,这对于像ls这样的工作很好,但为ls -al返回false.

erlang调用期望一个char列表而不是一个二进制文件,因此您需要以下内容

"ls -al" |> String.to_char_list |> :os.cmd

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...