executando if-statement a partir do prompt de comando

14

No bash eu posso fazer o seguinte:

if [ -f /tmp/test.txt ]; then echo "true"; fi

No entanto, se eu adicionar sudo na frente, isso não funcionará mais:

sudo if [ -f /tmp/test.txt ]; then echo "true"; fi
-bash: syntax error near unexpected token 'then'

Como posso fazer isso funcionar?

    
por m33lky 12.06.2012 / 04:48

2 respostas

12

sudo executa seu argumento usando exec , não por meio de um interpretador de shell. Portanto, ele é limitado a programas binários reais e não pode usar funções de shell, aliases ou builtins ( if é um builtin). Observe que as opções -i e -s podem ser usadas para executar os comandos fornecidos em um shell de login ou não-login, respectivamente (ou apenas o shell, interativamente; observe que você terá que escapar do ponto-e-vírgula ou citar o comando).

$ sudo if [ -n x ]; then echo y; fi
-bash: syntax error near unexpected token 'then'
$ sudo if [ -n x ]\; then echo y\; fi
sudo: if: command not found
$ sudo -i if [ -n x ]\; then echo y\; fi
y
$ sudo -s 'if [ -n x ]; then echo y; fi'
y
    
por 12.06.2012 / 04:58
8

Tente chamar a linha como um argumento de string no shell.

sudo /bin/sh -c 'if [ -f /tmp/test.txt ]; then echo "true"; fi'
    
por 12.06.2012 / 04:56