En bash, je peux faire ce qui suit:
if [ -f /tmp/test.txt ]; then echo "true"; fi
Cependant, si j'ajoute sudo
devant, cela ne fonctionne plus:
sudo if [ -f /tmp/test.txt ]; then echo "true"; fi
-bash: syntax error near unexpected token `then'
Comment puis-je le faire fonctionner?
bash
command-line
sudo
prompt
m33lky
la source
la source
sudo
n'utiliser que letest
et / ou le seulecho
. Pas l'intégralité de laif
déclaration.if sudo test
? Oui, ce serait mieux. Je ne peux pas utilisertest
sans leif
, car il définit le code de sortie autrement.Réponses:
sudo
exécute son argument en utilisantexec
, pas via un interpréteur de shell. Par conséquent, il est limité aux programmes binaires réels et ne peut pas utiliser de fonctions shell, d'alias ou de commandes intégrées (if
est une commande intégrée). Notez que les options-i
et-s
peuvent être utilisées pour exécuter les commandes données dans un shell de connexion ou non, respectivement (ou simplement le shell, de manière interactive; notez que vous devrez échapper les points-virgules ou citer la commande).la source
-i
ou-s
, l'instruction if sera évaluée correctement?Essayez d'appeler la ligne en tant qu'argument chaîne via le shell.
la source