代码之家  ›  专栏  ›  技术社区  ›  Eli

让两个erl shell在OS X上交谈

  •  5
  • Eli  · 技术社区  · 15 年前

    我想有两个二郎贝壳可以说话。我在操作系统X上运行。

    我试过图特17的例子 here .

    我也尝试过:

    $ erl -sname foo
    

    然后在一个新的终端:

    $ erl -sname bar
    
    (bar@elife)1> net_adm:ping(foo@elife).
    pang
    

    有什么想法吗?

    3 回复  |  直到 8 年前
        1
  •  9
  •   David Budworth    12 年前

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

    如果使用-name fqdn启动erl,则ping将工作。

    你可以从一开始

    $ erl -name foo@elife.local
    

    这可能可以通过使Mac能够解析自己的简称来解决。

    以下是我的Mac的输出示例。当我这样做的时候,我会得到和你一样的结果。

    第一节点:

    $ 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
    
        2
  •  3
  •   Jacob    15 年前

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

    127.0.0.1本地主机elife

    我的Mac可以很好地处理shortames,我相信这就是它所做的。

        3
  •  0
  •   Yogish Baliga    15 年前

    对于彼此通信的节点,两者都应该具有相同的cookie。在同一个框中,它将使用$home/.erlang.cookie文件中的cookie。如果该文件不存在,它将创建一个新文件并在其中放置一些随机cookie。未来的外壳使用相同的cookie。但最好通过setcookie参数在命令行上指定cookie。

    erl-名称node1@foo.local-setcookie mycookie