
On Thu, 21 Sep 2006, George Brewster wrote: ...
Yup, I'm on linux. My goal is to have a function which gives me a lazy string which is the output of a shell command, and takes a string as input. In particular, I'd like the shell command to behave lazily (read only as much input as is needed, and write only as much output as needed), so things like this work (should terminate and print a few lines of "hi"):
main = sh "yes hi" "there" >>= sh "head" >>= putStrLn
Good luck!
I tried your suggestion out (remove forkIO), and when I do that, this example returns but doesn't print anything.
For me, it hangs - since I left the wait in. If I omit the wait, it's "broken pipe", I think because we're trying to write data to "head" after it exits. Donn Cave, donn@drizzle.com
sh :: String -> String -> IO String sh cmd = \input -> do (stdin, stdout, _, pid) <- runInteractiveCommand cmd forkIO $ hPutStr stdin input >> hClose stdin forkIO $ waitForProcess pid >> return () hGetContents stdout