Você precisa dar a ele como um comando para bash
como ()
é interpretado por bash
para executar os comandos dentro de parênteses em um subshell:
sudo bash -c '(cd /some/dir; ./runscript.sh)'
Então, no bash, isso funciona bem:
(cd /some/dir; ./runscript.sh)
assumindo que /some/dir/runscript.sh existe.
mas
sudo (cd /some/dir; ./runscript.sh)
falha com o erro:
-bash: syntax error near unexpected token 'cd'
por quê?
Em um nível inferior, sudo
não está executando o (s) comando (s) no bash (ou outro shell), mas na verdade está iniciando um novo processo baseado no "comando" passado e iniciando esse processo com o restante argumentos que você passa.
Como @heemayl apontou, você pode usar a sintaxe sudo bash -c '(cd /some/dir; ./runscript.sh)'
. Isso ocorre porque bash
é um executável legítimo do sistema. sudo
é incapaz de criar um processo chamado (cd
como (
faz parte da sintaxe bash e normalmente não é um nome executável válido.