Why wouldn't an rpc that does an eval() of erlang "shell" code input work?<div>Seems easier than faking window-system-specific keycodes...</div><div><br></div><div>Sincerely,</div><div><br></div><div>jw</div>
<div><br clear="all"><br>--<br>Americans might object: there is no way we would sacrifice our living standards for the benefit of people in the rest of the world. Nevertheless, whether we get there willingly or not, we shall soon have lower consumption rates, because our present rates are unsustainable. <br>
<br>
<br><br><div class="gmail_quote">On Fri, Jul 15, 2011 at 11:30 AM, Vincent de Phily <span dir="ltr"><<a href="mailto:vincent.dephily@mobile-devices.fr">vincent.dephily@mobile-devices.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Wednesday 13 July 2011 18:23:41 Jon Watte wrote:<br>
> If I understand it correctly, "remsh" specifies to create an interactive<br>
> shell conneted to the remote node, but a command-line argument is evaluated<br>
> using the local node.<br>
> Try evaluating it as a rpc:call expression instead? You won't need a -remsh<br>
> at all then, instead passing the node argument to the rpc call.<br>
<br>
</div>That's how I understand it too, and it's really annoying that you can only use<br>
remsh interactively.<br>
<br>
rpc:call/4 is fine, but it only works one call at a time, needs to send all<br>
the results over the wire, and becomes useless as soon as you use terms that<br>
are tied to the VM.<br>
<br>
I've tried all maners of techniques to send input to a remsh: -eval, -noshell,<br>
-oldshell, -noinput, using a pipe, echoing in /proc/$PID/fd/0... The only<br>
thing that works is a hack with X that simulates keyboard input.<br>
<br>
Another thing that works is<br>
erl -noinput -name <a href="mailto:foobar@127.0.0.1">foobar@127.0.0.1</a> \<br>
    -eval "try {ok,S,_} = erl_scan:string(\"$YOURCODEHERE\"),<br>
               {ok,P} = erl_parse:parse_exprs(S),<br>
               {value,V,_} = rpc:call('$NODE', erl_eval, exprs, [P,[]]),<br>
               io:format(\"\\e[32mok\\e[m\n~p\n\", [V])<br>
           catch<br>
               _:Err -> io:format(\"\\e[31merror\\e[m\n~p\n\", [Err])<br>
           end." \<br>
    -s erlang halt<br>
but it isn't much more elegant.<br>
<br>
<br>
So I've got some nontrivial code to run remotely and automatically, but for<br>
various reasons I do not want to have a module loaded on the remote node that<br>
does the work. Most languages with an interactive shell will happily read from<br>
standard input instead of from the tty, but /usr/bin/erl doesn't. It has -eval<br>
which is great, except that it doesn't work with a remote shell. Any idea ?<br>
--<br>
<font color="#888888">Vincent de Phily<br>
<br>
</font></blockquote></div><br></div>