Ich habe den Befehl ausgeführt:
sudo -u elasticsearch -s "ulimit -Hn"
und es gab den Wert von ulimit -Hn zurück, wie von Benutzer elasticsearch gesehen, bis ich es unter Ubuntu 11.10 versuchte. Dort kehrt es zurück:
/bin/bash: ulimit -Hn: command not found
Ich habe ein paar verschiedene Befehle ausprobiert und wenn ich ein Argument verwende, erhalte ich immer "Befehl nicht gefunden":
$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found
Irgendwelche Ideen, wie ich einen Befehl ausführen kann, für den Argumente erforderlich sind sudo
?
-s
? Behalten Sie einfach die normale Shell und verwenden Sie sie, um Befehle auszuführen. Wie zum Beispielsudo -u elasticsearch ls all.sh
. Wennelasticsearch
eine unbrauchbare Standard-Shell vorhanden ist, verwenden Sie diese-s bash
vor dem eigentlichen Befehl.Antworten:
Sie müssen die doppelten Anführungszeichen entfernen. Es wird versucht, einen Befehl namens "ulimit -Hn" als einen einzelnen Befehl, Leerzeichen und alles auszuführen.
-s
muss die letztesudo
Option in dersudo
Befehlszeile sein, und alle folgenden Argumente werden$SHELL -c
zur Ausführung übergeben.Ich denke, die Art und Weise,
-s
wie verarbeitet wird, hat sich geändert, da Sie mit der aktuellen Methode Argumente mit Leerzeichen übergeben können,$SHELL
indem Sie sie in der Befehlszeile maskieren:Die alte Methode der Argumentbehandlung würde dieses
'/tmp/foo bar'
Argument in zwei Teile teilen und den Befehl unterbrechen.quelle