【发布时间】:2025-12-19 12:15:16
【问题描述】:
TL;DR:如何向 bash 启动的程序发送一行(并可能在后台运行)?
你好!我已经尝试了很多解决方案,但我无法将它们全部组合成一个有效的解决方案。
我想制作一个运行 N 个 Erlang 节点的 bash 脚本,例如:
for i in {1..N}:
erl -name server$i@127.0.0.1 -setcookie secret
我希望他们通过 ping 另一个节点来“连接”它们。为此,我们可以这样做:
erl -name some_server@127.0.0.1 -setcookie secret
(inside erlang)> net_adm:ping('another_server@127.0.0.1').
但是我不能将这两者结合起来,即使在单个节点上尝试也是如此。
我试过了:
echo "net_adm:ping('another_server@127.0.0.1')." > erlang_command
cat erlang_command - | erl -name some_server@127.0.0.1 -setcookie secret
(i've had partial success with this one, i can run it manually but i couldn't make it to work to run in the background or in another terminal)
或
xterm -e "echo \"net_adm:ping('another_server@127.0.0.1').\"; cat erlang_command - | erl -name some_server@127.0.0.1 -setcookie secret"
或其他技巧,例如:
echo "net_adm:ping('another_server@127.0.0.1')." | erl -name some_server@127.0.0.1 -setcookie secret
-----
echo "net_adm:ping('another_server@127.0.0.1')." > /dev/stdin
erl -name some_server@127.0.0.1 -setcookie secret
-----
Some uses of nohup and & (can't remember these exactly, but got a similar experience)
nohup erl -name some_server@127.0.0.1 -setcookie secret &
但是,这些要么不起作用,要么无法正确执行 ping 并完成我希望继续运行的 erlang 节点。我错过了什么?谢谢!
【问题讨论】:
标签: linux bash shell erlang nodes