Substitua sua última linha por:
exec su someuser -c '/tmp/elasticsearch-6.4.2/bin/elasticsearch "$@"' -- dummy-argv0 "$@"
Geralmente, esta é a maneira de passar argumentos através do comando su :
su user -c 'command "$@"' -- argv0 "$@"
Você deve omitir o -- em sistemas não-linux.
su na página de manual ( su [options] [username] ) é enganosa, aqui está um palavreado abaixo dela:
Additional arguments may be provided after the username, in which case they are supplied to the user's login shell.
....
You can use the -- argument to separate su options from the arguments supplied to the shell.
Você também deve substituir todos os echo s por printf '%s\n' ... , pois os echo incorporados de bash e zsh e /bin/echo do linux usarão o argumento -E (totalmente contrário ao que o padrão exige). Geralmente, não há como usar com segurança echo com variáveis que podem se expandir para -n , -e ou -E .
Nota:
Usar "$@" é a única maneira de preservar os argumentos exatamente como foram passados - qualquer variação de su -c "command $*" funcionará somente enquanto nenhum argumento contiver espaços ou quaisquer outros caracteres especiais que possam ser interpretados pelo shell . Até mesmo o exemplo atual poderia ser facilmente subvertido por um mkdir -p repositories.url.allowed_urls=http:/snapshot.test.only.ME.and.ME.and.ME no diretório inicial de someuser .