[GHC] #8838: Allow running bash shell commands
GHC
ghc-devs at haskell.org
Mon Mar 3 08:17:14 UTC 2014
#8838: Allow running bash shell commands
--------------------------+------------------------------------------------
Reporter: | Owner:
jstolarek | Status: new
Type: | Milestone: 7.10.1
feature request | Version: 7.8.1-rc2
Priority: normal | Operating System: Linux
Component: | Type of failure: Incorrect result at runtime
libraries/process | Test Case:
Keywords: | Blocking:
Architecture: |
Unknown/Multiple |
Difficulty: |
Unknown |
Blocked By: |
Related Tickets: #8802 |
--------------------------+------------------------------------------------
Current implementation of `process` library has limited usability.
`CreateProcess` record stores `CmdSpec` field, which is either a
`RawCommand` or `ShellCommand`. The problem is that:
* `RawCommand` command quotes and escapes the command parameters
* `ShellCommand` does no escaping but it runs command in `sh` shell
Corollary: there is no way to run `bash` command with unescaped
parameters. As a result there is no way to run this command (and many
others):
{{{
diff <(echo $ENV_FOO) <(echo $ENV_BAR)
}}}
Running it as a `RawCommand` (using `proc` function) fails because command
line parameters are escaped and become incorrect. Running it as
`ShellCommand` (using `shell` function) fails because this is not valid
`sh` syntax. I propose to create function that allows user to run `bash`
commands without escaping the parameters (or even better, run any shell
the user wants). In other words this program:
{{{
import System.Exit
import System.Process
main :: IO ()
main = do
(_, _, _, pid) <- createProcess (SOME_NEW_FUNCTION "diff" ["<(echo
$FOO)", "<(echo $BAR)"] )
{ env = Just
[("FOO","Foo"),("BAR","Bar")] }
ecode <- waitForProcess pid
case ecode of
ExitSuccess -> putStrLn "All’s right with the world!"
ExitFailure _ -> putStrLn ":-("
}}}
should produce:
{{{
1c1
< Foo
---
> Bar
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8838>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list