[erlang-questions] Executing external commands

Per Hedeland <>
Mon Feb 12 20:30:09 CET 2007


Fernando Ipar <> wrote:
>
>check(Command) ->
>        Output = os:cmd(Command ++ ";echo $?"),
>        {match, Start, Length} = 
>regexp:first_match(Output,".*\n[0-9][0-9]*\n"),
>        Pos = (Start + Length) - 2,
>        { string:substr(Output,Pos,1), Output}.

>4> ext:check("lsss /bin").
>{"7","sh: line 1: lsss: command not found\n127\n"}
  ^^^                                       ^^^

Oops!:-) If you want to stick with regexp, a more proper incantation
might be:

    {match, Start, Length} = regexp:match(Output,"\n[0-9]+\n$"),
    {string:substr(Output,Start+1,Length-2), Output}.

However I think this might be preferrable:

    Code = hd(lists:reverse(string:tokens(Output, "\n")))

--Per Hedeland



More information about the erlang-questions mailing list