Error parsing command arguments
I got the following error passing a "command" as an argument to yesod devel:
> dotenv -o -- yesod devel --success-hook "echo foo"
Invalid argument `foo'
Usage: yesod [-d|--dev] [-v|--verbose] COMMAND
If I call it directly, it works as expected:
> yesod devel --success-hook "echo foo"
My theory is that this is not related to yesod devel per se, but rather to how dotenv -- <command> <args> works, as it seems that is not properly escaping the arguments after --
I can reproduce the bug with the following example:
(don't mind the dot at the end)
And adding some debug logging I see:
Which shows that arguments after -- don't seem to keep the quotes. The parser for the arguments looks like this:
many (argument str (metavar "ARG"))
Which seems correct and makes me think this might be a bug in optparse-applicative?
This is the result of getArgs:
I think maybe the individual elements of the list are not being quoted, which causes the parser to interpret "echo hi" as 2 separate arguments.