stackbuilders / dotenv-hs

Load environment variables from dotenv files for Haskell
https://hackage.haskell.org/package/dotenv
MIT License
65 stars 14 forks source link

Error parsing command arguments #200

Open sestrella opened 4 weeks ago

sestrella commented 4 weeks ago

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 --

aloussase commented 2 weeks ago

I can reproduce the bug with the following example:

image

(don't mind the dot at the end)

And adding some debug logging I see:

image

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:

image

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.