Eu tenho um script de shell que executa exec
para substituir a si mesmo por outro comando. O outro comando leva alguns argumentos opcionais.
exec mycommand $ARG1 $ARG2 $ARG3
Qualquer um desses argumentos pode ser preenchido ou não preenchido. Se eles não estiverem preenchidos, eles não serão renderizados como um argumento para a função. Por exemplo:
# if you have:
ARG1=foo
ARG3=bar
exec mycommand $ARG1 $ARG2 $ARG3
# then you get:
exec mycommand foo bar
No entanto, quero espaços para ser legal nos valores para esses argumentos e para isso não causar-lhes para produzir argumentos adicionais. Isto é,
# if you have
ARG1="foo bar baz"
ARG2="qux"
exec mycommand $ARG1 $ARG2 $ARG3
# then I want:
exec mycommand "foo bar baz" qux
# not:
exec mycommand foo bar baz qux
Eu tentei colocar aspas com escape nos argumentos, mas exec esperava que elas literalmente fizessem parte do valor.
ARG1="\"foo bar baz\""
exec mycommand $ARG1 $ARG2 $ARG3
# gives you:
exec mycommand \"foo bar baz\"
Eu também tentei citar as variáveis em exec, mas depois ele passou a passar strings vazias quando os argumentos não estavam presentes:
ARG2="foo bar"
exec mycommand "$ARG1" "$ARG2" "$ARG3"
# gives you:
exec mycommand "" "foo bar" ""
Existe uma maneira melhor de construir um comando e passá-lo para exec? Existe outra maneira de substituir o processo atual por outro?