aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Valim <[email protected]>2019-04-29 17:54:18 +0200
committerJosé Valim <[email protected]>2019-04-29 17:56:44 +0200
commit6944df6e540d57f5ddf04e01d44d3aefd9c4720d (patch)
tree8cb7b2e072a403c8ef42acf3bd165bdf5eee7f63
parent2f879097241d289e0100c7d1725485e2276a7f70 (diff)
downloadotp-6944df6e540d57f5ddf04e01d44d3aefd9c4720d.tar.gz
otp-6944df6e540d57f5ddf04e01d44d3aefd9c4720d.tar.bz2
otp-6944df6e540d57f5ddf04e01d44d3aefd9c4720d.zip
Add hostname to -remsh if none is given
The -name option already computes a default hostname if none is given. This PR adds the same behaviour to -remsh. Now we can run: erl -name foo -remsh bar erl -sname foo -remsh bar This simplifies deployment scripts as otherwise they have to compute the hostname by hand or start an Erlang VM instance only to do so.
-rw-r--r--erts/doc/src/erl.xml5
-rw-r--r--lib/kernel/src/user_drv.erl8
2 files changed, 11 insertions, 2 deletions
diff --git a/erts/doc/src/erl.xml b/erts/doc/src/erl.xml
index 88ddb03e97..bfd4dd8fe9 100644
--- a/erts/doc/src/erl.xml
+++ b/erts/doc/src/erl.xml
@@ -460,7 +460,10 @@
<tag><c><![CDATA[-remsh Node]]></c></tag>
<item>
<p>Starts Erlang with a remote shell connected to
- <c><![CDATA[Node]]></c>.</p>
+ <c><![CDATA[Node]]></c>. Requires either <c><![CDATA[-name]]></c>
+ or <c><![CDATA[-sname]]></c> to be given. If <c><![CDATA[Node]]></c>
+ does not contain a hostname, one is automatically taken from
+ <c><![CDATA[-name]]></c> or <c><![CDATA[-sname]]></c></p>
</item>
<tag><c><![CDATA[-rsh Program]]></c></tag>
<item>
diff --git a/lib/kernel/src/user_drv.erl b/lib/kernel/src/user_drv.erl
index 08286dd476..69ff8e7971 100644
--- a/lib/kernel/src/user_drv.erl
+++ b/lib/kernel/src/user_drv.erl
@@ -120,7 +120,7 @@ server1(Iport, Oport, Shell) ->
{Curr,Shell1} =
case init:get_argument(remsh) of
{ok,[[Node]]} ->
- ANode = list_to_atom(Node),
+ ANode = list_to_atom(append_hostname(Node)),
RShell = {ANode,shell,start,[]},
RGr = group:start(self(), RShell, rem_sh_opts(ANode)),
{RGr,RShell};
@@ -139,6 +139,12 @@ server1(Iport, Oport, Shell) ->
%% Enter the server loop.
server_loop(Iport, Oport, Curr, User, Gr, {false, queue:new()}).
+append_hostname(Node) ->
+ case string:find(Node, "@") of
+ nomatch -> Node ++ string:find(atom_to_list(node()), "@");
+ _ -> Node
+ end.
+
rem_sh_opts(Node) ->
[{expand_fun,fun(B)-> rpc:call(Node,edlin_expand,expand,[B]) end}].