erreur de syntaxe près de jeton inattendu "faire" lors de l'exécution avec sudo
À partir d'ici: http://www.sat.dundee.ac.uk/psc/watchdog/watchdog-testing.html
for n in $(seq 1 60); do echo $n; sleep 1; sync; done
J'obtiens:
:~$ sudo for n in $(seq 1 60); do echo $n; sleep 1; sync; done
bash: syntax error near unexpected token `do'
OriginalL'auteur Aquarius_Girl | 2014-08-07
Vous devez vous connecter pour publier un commentaire.
La coquille analyse la ligne de commande et parce que
for
ressemble à un argument desudo
, vous obtiendrez undo
sansfor
.De fixer, d'exécuter la boucle dans un shell interne est exécuté, soit comme un script séparé, ou comme cela;
Mieux encore, évitez de l'utiliser rien d'inutile, car un utilisateur privilégié:
La première
sudo
va exiger un mot de passe, mais les itérations suivantes devraient l'avoir mis en cache, avec les paramètres par défaut sur la plupart des distributions.Si vous êtes sur le coup, vous pouvez utiliser
{1..60}
au lieu de$(seq 1 60)
. Évidemment, si vous souhaitez utiliser Bash-syntaxe spécifique à l'intérieur des guillemets simples dans le premier exemple, vous avez besoinbash -c
au lieu desh -c
OriginalL'auteur tripleee
for
est une fonction interne (à ne pas confondre avec les fonctions) d'un shell c'est pourquoi vous ne pouvez pas l'appeler. Vous devriez appeler explicitement le binaire de la coquille qui s'exécute avec le code comme ceci:Avec bash:
OriginalL'auteur konsolebox
C'est parce que le poing point-virgule met fin à la
sudo
de commande, ce qui fera dedo
une nouvelle commande. La façon la plus simple de résoudre ce problème est de mettre la boucle à l'intérieur d'un fichier et de l'exécuter, commeJe parle du terminal de commande. où doit ; être placé?
Lors de l'utilisation de
sudo
vous ne pouvez pas avoir des commandes qui nécessite incorporé des points-virgules.OriginalL'auteur Some programmer dude