ファイルからの入力を標準入力として、シェルおよびスタンドアロンで実行されている erlang プログラムにパイプする方法は?
ファイルがhr.erl
あり、シェルからコンパイルします。を使用して stdin からの入力を受け入れる関数がありますio:fread()
。一致{ok, [0]}
した場合に終了するガード付きのケース式を作成しました。の代わりに0
、実際には である必要がありますeof
。
- シェルで実行しているときに eof を送信する方法は?
inp.txt
各行に値1
2
3
を持つファイルがあります0
。<
パイプ演算子を使用して渡すにはどうすればよいですか? のようなものはありerl -hr <inp.txt
ますか?シェル内で標準入力にパイプできますか。
これまでの私のプログラムは次のとおりです(を含むように更新されました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([]).
シェルから
1> c(hr).
{ok,hr}
2> hr:main().
1
inp 1
2
inp 2
3
inp 3
0
terminate
[1,2,3]
ありがとう。