[erlang-questions] Running multiple commands like os:cmd/1

Garrett Smith <>
Fri Dec 28 06:44:56 CET 2012


Have you experimented with calling the shell as a single command, passing
along the string to execute? E.g.

bash -c "<your series of commands>"

Garrett
On Dec 26, 2012 2:37 PM, "Gleb Peregud" <> wrote:

> Happy holidays, everyone!
>
> I want to run multiple commands in a single shell from my code through
> some sort of open_port({spawn, ...}). I have four requirements:
> 1) I want it to work asynchronously (i.e. I start a command and I get
> it's results streamed to a process as it happens);
> 2) I want to know exactly when a command finishes;
> 3) Binary output should be handled properly;
> 4) Changes in env variables should be preserved between commands.
>
> A naive sequence of os:cmd/1 or open_port({spawn, ...}) doesn't
> satisfy requirement 4.
>
> os:cmd/1 has a nice backend code in there, but it doesn't satisfy
> requirement 3. It has a bug. Try running length(os:cmd("head -c 1000
> /dev/urandom")).
>
> open_port({spawn, "/bin/sh -s -"}, [line]) with port_command/2 doesn't
> satisfy requirement 2.
>
> Any ideas how to implement it? Is there any library which does it?
>
> Cheers,
> Gleb
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20121227/65d5b156/attachment.html>


More information about the erlang-questions mailing list