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