
Hi Everyone, I am strugling to get the following code to work correctly and I'm hoping someone will be able to shed some light as to why the code is behaving as it does: {-| runs the supplied command and args as a SHELL command -} runShell :: String -> IO (String, ExitCode) runShell shellCmd = do (_, Just hOut, Just hErr, hProcess) <- createProcess (shell shellCmd) { std_out = CreatePipe, std_err = CreatePipe } exitCode <- waitForProcess hProcess outTxt <- hGetContents hOut errTxt <- hGetContents hErr return $ (outTxt ++ errTxt, exitCode) If I try to su the runShell function with the following command, it simply blocks forever: git --no-pager blame <your git file here> but if I do: git status The runShell function works as expected. Can someone shed some light on why the 'git blame' command blocks? Interrestingly enough, if I remove the waitForProcess action, the 'git blame' command starts working as expected, but I no longer have my blocking behaviour, waiting for the command to finish and return the ExitCode. Regards Rouan