J'ai utilisé pour exécuter la commande:
sudo -u elasticsearch -s "ulimit -Hn"
et il retournait la valeur de ulimit -Hn telle que vue par l'utilisateur elasticsearch jusqu'à ce que je l'essaie sur Ubuntu 11.10. Là, il revient:
/bin/bash: ulimit -Hn: command not found
J'ai essayé quelques commandes différentes, et quand j'utilise un argument, j'obtiens toujours "commande introuvable":
$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found
Toutes les idées sur comment puis-je exécuter une commande qui nécessite des arguments sudo
?
-s
? Gardez simplement le shell normal et utilisez-le pour exécuter des commandes. Tels quesudo -u elasticsearch ls all.sh
. Sielasticsearch
a un shell par défaut inutilisable, utilisez-s bash
avant la commande réelle.Réponses:
Vous devez supprimer les guillemets doubles. Il essaie d'exécuter une commande appelée "ulimit -Hn" en tant que commande unique, espaces et tout.
-s
doit être la dernièresudo
option de lasudo
ligne de commande et tous les arguments suivants sont passés à$SHELL -c
pour s'exécuter.Je suppose que la façon dont
-s
est traité a changé, car la façon actuelle vous permet de passer des arguments avec des espaces$SHELL
en les échappant sur la ligne de commande:L'ancienne méthode de gestion des arguments divisait cet
'/tmp/foo bar'
argument en deux, rompant la commande.la source