加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 18:42:57 所属栏目:安全 来源:网络整理
导读:在学习语言的早期阶段,并通过ElixirSips系列视频进行工作.我继续打击那些被语言变化稍微亵渎的东西.试图围绕这个问题,Google / Github问题跟踪/拖网捕获是让我无处可借.我有这个非常基本的模块,它应该只运行一个shell命令: defmodule QuickieSynth.Sound do
在学习语言的早期阶段,并通过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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读