Diferença ao usar backticks entre aspas duplas e aspas simples no Bash

12

Por que as duas execuções a seguir diferem na saída? (Eu preciso de aspas duplas para variáveis no meu comando final)

$ sudo su -c "echo 'cat /root/root_file'"
cat: /root/root_file: Permission denied
$ sudo su -c 'echo 'cat /root/root_file''
Yay, highly classified content!
    
por Ambidex 06.02.2015 / 15:42

2 respostas

19

O Bash realiza uma série de expansões antes o comando é executado ( sudo neste caso). No primeiro caso, a substituição do comando é executada porque está entre aspas duplas - é executada como você, daí o erro. No segundo caso, as aspas simples evitam expansões, portanto os backticks não são substituídos até que o shell do root esteja em execução.

Veja também o link

    
por 06.02.2015 / 15:48
6

No primeiro exemplo, os backticks são avaliados pelo seu shell (como você e não como root). Experimente com

sudo su -c "echo 'whoami'"

No segundo, com as aspas simples ' , toda a string echo 'cat /root/root_file' é passada para o shell raiz.

    
por 06.02.2015 / 15:48