X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/1638d5a206cd79e9619f0d3334fed29eaddc6b51..53043cda16a4efd64705d7fc5ca188f67c92c84f:/src/slave.sml diff --git a/src/slave.sml b/src/slave.sml index 01d872c..7e3f9d8 100644 --- a/src/slave.sml +++ b/src/slave.sml @@ -82,6 +82,39 @@ fun shellF (ss, msg) = ErrorMsg.error NONE (msg s) end +fun run (program, argv) = + let + val proc = Unix.execute (program, argv) + + fun loop inf = + case TextIO.inputLine inf of + NONE => () + | SOME line => loop inf + (* Programs that output will fail unless we eat their output *) + val () = loop (Unix.textInstreamOf proc) + in + OS.Process.isSuccess (Unix.reap proc) + end + +fun shellOutput ss = + let + val proc = Unix.execute ("/bin/bash", ["-c", String.concat ss ^ " 2>&1"]) + val inf = Unix.textInstreamOf proc + + fun loop out = + case TextIO.inputLine inf of + NONE => String.concat (rev out) + | SOME line => loop (line :: out) + + val lines = loop [] + in + print lines; + if OS.Process.isSuccess (Unix.reap proc) then + NONE + else + SOME lines + end + fun hostname () = let val inf = TextIO.openIn "/etc/hostname"