sudo -u nome de usuário -s “cmd arg” retorna o comando não encontrado


10

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?


por que o -s? Apenas mantenha o shell normal e use-o para executar comandos. Tais como sudo -u elasticsearch ls all.sh. Se elasticsearchtiver um shell padrão inutilizável, use -s bash antes do comando real.
glglgl

Respostas:


16

Você precisa remover as aspas duplas. Ele está tentando executar um comando chamado "ulimit -Hn" como um único comando, espaços e tudo. -sprecisa ser a última sudoopção na sudolinha de comando e todos os argumentos a seguir são passados ​​para $SHELL -cserem executados.

sudo -u elasticsearch -s ulimit -Hn

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:

$ touch '/tmp/foo bar'
$ sudo -s rm '/tmp/foo bar'

O método antigo de manipulação de argumentos dividiria esse '/tmp/foo bar'argumento em dois, quebrando o comando.


onde você testou que não dividiria o comando?
Zaratustra

@Zarathustra Isso foi há cinco anos - não me lembro de volta tão longe. Sugiro pesquisar no histórico do código fonte do sudo - você poderá descobrir quando o comportamento mudou.
Camh
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.