让两个erl shell在OS X上进行通话

时间:2010-01-26 01:00:08

标签: macos shell erlang erl

我希望能够有两个Erlang shell进行交谈。我在OS X上运行。

我尝试了tut17示例here

我也试过了:

$ erl -sname foo

然后在新的终端:

$ erl -sname bar

(bar@elife)1> net_adm:ping(foo@elife).
pang

有什么想法吗?

3 个答案:

答案 0 :(得分:10)

它在mac上有点破碎。默认情况下,mac无法解析自己的短名称。你的主人的名字可能真的是“elife.local”。

如果你使用-name FQDN启动erl,则ping将起作用。

即:你会用

开始
$ erl -name foo@elife.local

这可能可以通过使mac能够解析它自己的短名称

来解决

这是我mac的示例输出。当我做-sname时,我会得到与你相同的结果。

第一个节点:

$ erl -name foo@mookie.local
Erlang R13B03 (erts-5.7.4) [source] [smp:2:2] [rq:2] [async-threads:0] [kernel-poll:false]

Eshell V5.7.4  (abort with ^G)
(foo@mookie.local)1> 

另一个节点:

$ erl -name bar@mookie.local
Erlang R13B03 (erts-5.7.4) [source] [smp:2:2] [rq:2] [async-threads:0] [kernel-poll:false]

Eshell V5.7.4  (abort with ^G)
(bar@mookie.local)1> net_adm:ping('foo@mookie.local').
pong

答案 1 :(得分:4)

更简单的修复可能只是编辑您的/ etc / hosts文件,并确保您有类似这样的内容:

127.0.0.1 localhost elife

我的mac可以很好地处理短名称,我相信这就是它的作用。

答案 2 :(得分:0)

对于节点彼此通信,两者应具有相同的cookie。它在同一个盒子上工作,因为它最终使用来自$ HOME / .erlang.cookie文件的cookie。如果此文件不存在,则会创建一个新文件并在其中放入一些随机cookie。未来的shell使用相同的cookie。但最好通过setcookie参数在命令行中指定cookie。

erl -name node1@foo.local -setcookie mycookie