Eu costumava executar o comando:
sudo -u elasticsearch -s "ulimit -Hn"
e estava retornando o valor de ulimit -Hn como visto pelo elasticsearch do usuário até que eu tentei no Ubuntu 11.10. Lá ele retorna:
/bin/bash: ulimit -Hn: command not found
Tentei alguns comandos diferentes e, quando uso um argumento, sempre obtenho "comando não encontrado":
$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found
Alguma idéia de como executar um comando que exija argumentos sudo
?
-s
? Apenas mantenha o shell normal e use-o para executar comandos. Tais comosudo -u elasticsearch ls all.sh
. Seelasticsearch
tiver um shell padrão inutilizável, use-s bash
antes do comando real.Respostas:
Você precisa remover as aspas duplas. Ele está tentando executar um comando chamado "ulimit -Hn" como um único comando, espaços e tudo.
-s
precisa ser a últimasudo
opção nasudo
linha de comando e todos os argumentos a seguir são passados para$SHELL -c
serem executados.Eu acho que a maneira como
-s
é processada mudou, pois a maneira atual permite que você passe argumentos com espaços$SHELL
, escapando-os na linha de comando:O método antigo de manipulação de argumentos dividiria esse
'/tmp/foo bar'
argumento em dois, quebrando o comando.fonte