Elixir:在命令行中将内容从文件馈送到函数

时间:2019-01-31 16:06:16

标签: bash shell elixir

我有一个csv类型的文件。我希望能够从命令行调用一个函数,并将该文件的内容(而不是文件本身)提供给它。

我尝试致电

mix run lib/my_module.ex $(cat tmp.txt)

在我的模块文件末尾:

IO.puts MyModule.my_func(System.argv) 

内容已正确处理到函数,但是System.argv是字符串列表,它失去了格式,无法正确解析。

如果我改为尝试

mix run -e "MyModule.my_func(:args)" 

我找不到如何使用cat或其他方式来向其提供文件内容。

如何使其工作?

2 个答案:

答案 0 :(得分:1)

尝试在引号之间加上引号,例如:mix run lib/my_module.ex "$(cat tmp.txt)"

答案 1 :(得分:1)

在我看来,这就像XY Problem。仅传递文件的名称,然后在模块内File.read/1 进行。

有点像:

mix run lib/my_module.ex tmp.txt

并在您的模块中:

System.argv
|> File.read!()
|> MyModule.my_func() 
|> IO.puts()