Ho uno script di shell che viene eseguito exec
per sostituirsi con un altro comando. L'altro comando accetta alcuni argomenti opzionali.
exec mycommand $ARG1 $ARG2 $ARG3
Qualcuno di questi argomenti potrebbe essere popolato o non popolato. Se non sono popolati, non vengono visualizzati come argomento per la funzione. Per esempio:
# if you have:
ARG1=foo
ARG3=bar
exec mycommand $ARG1 $ARG2 $ARG3
# then you get:
exec mycommand foo bar
Tuttavia, voglio che gli spazi siano legali nei valori di questi argomenti, e per questo non li induca a produrre argomenti aggiuntivi. Questo è,
# 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
Ho provato a mettere le virgolette di escape negli argomenti, ma exec si aspettava che facessero letteralmente parte del valore.
ARG1="\"foo bar baz\""
exec mycommand $ARG1 $ARG2 $ARG3
# gives you:
exec mycommand \"foo bar baz\"
Ho anche provato a citare le variabili in exec, ma poi ha iniziato a passare stringhe vuote quando gli argomenti non erano presenti:
ARG2="foo bar"
exec mycommand "$ARG1" "$ARG2" "$ARG3"
# gives you:
exec mycommand "" "foo bar" ""
C'è un modo migliore per costruire un comando e passarlo a exec? C'è un altro modo per sostituire il processo corrente con un altro?