如何将文件中的输入作为标准输入传输到在 shell 中运行以及独立运行的 erlang 程序?
我有一个文件hr.erl,我从 shell 编译它。其中有一个函数使用 接受来自 stdin 的输入io:fread()。我写了一个带有守卫的 case 表达式,如果它匹配,{ok, [0]}它应该终止。相反0,我实际上需要它eof。
inp.txt值1 2 3和。0如何使用<管道运算符传递它?有类似的东西erl -hr <inp.txt吗?我可以将其通过管道传输到 shell 内的标准输入吗?这是到目前为止我的程序(更新为包括eof)。
-module(hr).
-export([main/0]).
r(L) ->
case io:fread("", "~d") of
eof ->
io:format("eof~n", []),
ok;
{ok, [0]} ->
io:format("terminate~n", []),
lists:reverse(L);
{ok, [N]} ->
io:format("inp ~p~n", [N]),
r([N|L])
end.
main() -> r([]).
Run Code Online (Sandbox Code Playgroud)
来自外壳
1> c(hr).
{ok,hr}
2> hr:main().
1
inp 1
2
inp 2
3
inp 3
0
terminate
[1,2,3]
Run Code Online (Sandbox Code Playgroud)
谢谢。
小智 1
使用escript时我能够通过管道输入。编写没有模块或导出信息的 erlang 程序,使用main(_)函数,即以escript兼容的方式。然后我们可以使用管道cat输入
cat inp.txt | escript hr.erl
Run Code Online (Sandbox Code Playgroud)
这有效并且程序在遇到 时终止eof。但我仍然不知道为什么使用重定向运算符时它不起作用<。
| 归档时间: |
|
| 查看次数: |
3529 次 |
| 最近记录: |