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

前端之家收集整理的这篇文章主要介绍了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
原文链接:https://www.f2er.com/bash/386107.html

猜你在找的Bash相关文章