Я использовал для выполнения команды:
sudo -u elasticsearch -s "ulimit -Hn"
и он возвращал значение ulimit -Hn, как его видел пользовательasticsearch, пока я не попробовал его в Ubuntu 11.10. Там это возвращается:
/bin/bash: ulimit -Hn: command not found
Я пробовал несколько разных команд, и когда я использую аргумент, я всегда получаю «команда не найдена»:
$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found
Любые идеи о том, как я могу выполнить команду, которая требует аргументов до конца sudo
?
-s
? Просто держите обычную оболочку и используйте ее для выполнения команд. Такие какsudo -u elasticsearch ls all.sh
. Еслиelasticsearch
имеет непригодную оболочку по умолчанию, используйте-s bash
перед фактической командой.Ответы:
Вам необходимо удалить двойные кавычки. Он пытается запустить команду с именем "ulimit -Hn" как одну команду, пробелы и все.
-s
должен быть последнимsudo
параметром вsudo
командной строке, и все последующие аргументы передаются$SHELL -c
для выполнения.Я предполагаю, что способ
-s
обработки изменился, поскольку текущий способ позволяет передавать аргументы с пробелами$SHELL
, экранируя их в командной строке:Старый метод обработки аргументов разделял этот
'/tmp/foo bar'
аргумент на две части, разбивая команду.источник