#4305: Add showCommandForUser to process:System.Process
---------------------------------+------------------------------------------
Reporter: igloo | Owner:
Type: proposal | Status: new
Priority: normal | Milestone: Not GHC
Component: Compiler | Version: 6.12.3
Keywords: | Testcase:
Blockedby: | Difficulty:
Os: Unknown/Multiple | Blocking:
Architecture: Unknown/Multiple | Failure: None/Unknown
---------------------------------+------------------------------------------
There are many programs (e.g. ghc and Cabal) which run other programs, and
when run with `-v` want to show the user what they are running. The user
then often wants to run the command by hand, in order to debug a problem,
but this can be tricky when the command or its arguments include spaces or
other characters treated specially by shells.
This proposal is for a `System.Process.showCommandForUser` function in the
process package, such that `showCommandForUser cmd args` can be copied and
pasted directly into a shell.
I would have put this in `System.Cmd`, except that module is earmarked to
be deprecated.
The code already existed within System.Process; I've just rearranged it a
bit:
{{{
showCommandForUser :: FilePath -> [String] -> String
showCommandForUser cmd args = unwords (map translate (cmd : args))
translate :: String -> String
#if mingw32_HOST_OS
translate str = '"' : snd (foldr escape (True,"\"") str)
where escape '"' (b, str) = (True, '\\' : '"' : str)
escape '\\' (True, str) = (True, '\\' : '\\' : str)
escape '\\' (False, str) = (False, '\\' : str)
escape c (b, str) = (False, c : str)
#else
translate str = '\'' : foldr escape "'" str
where escape '\'' = showString "'\\''"
escape c = showChar c
#endif
}}}
The fallback for `rawSystem` is now
{{{
rawSystem cmd args = system (showCommandForUser cmd args)
}}}
except with hugs on Windows, where for some reason it's
{{{
rawSystem cmd args = system (cmd ++ showCommandForUser "" args)
}}}
which is surely wrong, but how it behaved before.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4305>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs