Para armazenar vários argumentos, use uma matriz, não uma variável escalar.
additional_arguments=(
--set
'args={/bin/bash,-c,cd /var/www && sudo -u www-data bash scripts/system/update.sh}'
)
randomBinary --some-hardcoded-parameters "${additional_arguments[@]}"
Note que como as variáveis de ambiente são strings de bytes não-NUL, você precisa de alguma codificação se quiser passar uma definição de array para outro comando através do ambiente.
Com ksh
, bash
, zsh
ou yash
, você pode usar:
ARRAY_DEFINITION="$(typeset -p additional_arguments)" my_second_script.sh
para exportar a definição da matriz em uma variável de ambiente no script de chamada.
E eval "$ARRAY_DEFINITION"
no script chamado para importar essa definição de matriz.
Note que é importante que o código seja avaliado no mesmo local e com o mesmo shell em que foi gerado.
Observe também que, se a definição da matriz for avaliada dentro de uma função, a matriz será local para a função.
Alguns shells como rc
, es
ou fish
permitem exportar matrizes (usando sua própria codificação internamente).
Aqui, seria mais fácil passar as informações como argumentos para o script chamado, já que esse é um array.
No script de chamada:
my_second_script.sh "${additional_arguments[@]}"
No script chamado:
randomBinary --some-hardcoded-parameters "$@"
Ou chame o script chamado com .
para compartilhar as variáveis do shell do responsável pela chamada para que você não precise usar o ambiente para passar esses dados por uma execução.