I have a list of options to pass to an executable. For the purposes of the MWE, a call could look like
`c`
`c a=1`
`c a=1 b=2`
Whether I need to append a
and b
are known at runtime, and are taken from a NamedTuple
.
Naively I tried generating a list of cmds and splicing it:
julia> args = [`a=1`, `b=2`]
2-element Vector{Cmd}:
`a=1`
`b=2`
julia> `c $(args...)`
`c a=1b=2`
Notice that the two are merged. Is this a bug?
How to do this correctly?
2 Likes
There is of course
julia> foldl((x, y) -> `$x $y`, args; init = `c`)
`c a=1 b=2`
1 Like
This seems to do the right thing:
julia> args = ["a=1", "b=2"]
2-element Vector{String}:
"a=1"
"b=2"
julia> `c $args`
`c a=1 b=2`
This does the same merging thing:
julia> args = ["a=1", "b=2"]
2-element Vector{String}:
"a=1"
"b=2"
julia> `c $(args...)`
`c a=1b=2`
This seems to have extra quotes:
julia> args = [`a=1`, `b=2`]
2-element Vector{Cmd}:
`a=1`
`b=2`
julia> `c $args`
`c \`a=1\` \`b=2\``
I am not really sure why and what the rules are but have always wondered.
1 Like
mkitti
4
There is a constructor that takes a Vector{String}
. You can also manipulate that Vector{String}
via the field exec
:
julia> command = Cmd(["c", "a=1", "b=1"])
`c a=1 b=1`
julia> command = `c`
`c`
julia> push!(command.exec, "a=1")
2-element Vector{String}:
"c"
"a=1"
julia> push!(command.exec, "b=1")
3-element Vector{String}:
"c"
"a=1"
"b=1"
1 Like
Note that neither of these solutions is exposed API. The only Cmd
method that is documented is the one that takes a Cmd
.
Just to clarify the question: I am looking for solution(s) via the API, and also want to know if the mentioned example is a bug.