sudo (cd / algum / dir; ./runscript.sh) falha

6

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ê?

    
por adapt-dev 16.12.2015 / 20:28

2 respostas

9

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)'
    
por 16.12.2015 / 20:30
6

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.

    
por 16.12.2015 / 20:35

Tags