Solía ejecutar el comando:
sudo -u elasticsearch -s "ulimit -Hn"
y estaba devolviendo el valor de ulimit -Hn como lo vio el usuario elasticsearch hasta que lo probé en Ubuntu 11.10. Ahí vuelve:
/bin/bash: ulimit -Hn: command not found
Intenté algunos comandos diferentes, y cuando uso un argumento siempre obtengo "comando no encontrado":
$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found
¿Alguna idea sobre cómo puedo ejecutar un comando que requiere argumentos sudo
?
-s
? Simplemente mantenga el shell normal y úselo para ejecutar comandos. Tales comosudo -u elasticsearch ls all.sh
. Sielasticsearch
tiene un shell predeterminado inutilizable, úselo-s bash
antes del comando real.Respuestas:
Necesita eliminar las comillas dobles. Está tratando de ejecutar un comando llamado "ulimit -Hn" como un solo comando, espacios y todo.
-s
debe ser la últimasudo
opción en lasudo
línea de comando, y todos los siguientes argumentos se pasan$SHELL -c
a ejecutar.Supongo que la forma en que
-s
se procesa ha cambiado, ya que la forma actual le permite pasar argumentos con espacios$SHELL
escapándolos en la línea de comando:El antiguo método de manejo de argumentos dividiría ese
'/tmp/foo bar'
argumento en dos, rompiendo el comando.fuente