Kiedyś wykonywałem polecenie:
sudo -u elasticsearch -s "ulimit -Hn"
i zwracał wartość ulimit -Hn widzianą przez użytkownika elasticsearch, dopóki nie wypróbowałem go na Ubuntu 11.10. Tam zwraca:
/bin/bash: ulimit -Hn: command not found
Próbowałem kilku różnych poleceń, a kiedy używam argumentu, zawsze pojawia się komunikat „polecenie nie znaleziono”:
$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found
Jakieś pomysły na to, jak wykonać polecenie wymagające argumentów sudo
?
-s
? Po prostu zachowaj normalną powłokę i używaj jej do wykonywania poleceń. Takich jaksudo -u elasticsearch ls all.sh
. Jeślielasticsearch
ma domyślną powłokę, której nie można użyć, użyj jej-s bash
przed właściwym poleceniem.Odpowiedzi:
Musisz usunąć podwójne cudzysłowy. Próbuje uruchomić polecenie o nazwie „ulimit -Hn” jako pojedyncze polecenie, spacje i wszystko.
-s
musi być ostatniąsudo
opcją wsudo
wierszu poleceń, a wszystkie poniższe argumenty są przekazywane$SHELL -c
do wykonania.Wydaje mi się, że sposób
-s
przetwarzania został zmieniony, ponieważ obecny sposób pozwala przekazywać argumenty spacjami$SHELL
, unikając ich w wierszu poleceń:Stara metoda obsługi argumentów dzieliłaby ten
'/tmp/foo bar'
argument na dwie części, przerywając polecenie.źródło