Hay algunas preguntas en el sitio que parecen estar relacionadas con mi problema, pero no pude encontrar una solución en ninguna de ellas.
Mi sistema operativo es Ubuntu 12.04. He mvninstalado /tools/noarch/apache-maven-3.1.1y he agregado las siguientes líneas al final de mi /etc/profile:
export M2_HOME=/tools/noarch/apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH
Después de eso lo ejecuto source /etc/profile.
Ahora mi problema es: cuando ejecuto mvn --versionel comando tiene éxito y mvnejecutable se encuentra, mientras que si ejecuto: sudo mvn --versionMe da la salida: sudo: mvn: command not found. Sé que PATHpuede ser diferente cuando ejecuto un comando sudoy es por eso que probé esto:
$>sudo echo $PATH
/tools/noarch/apache-maven-3.1.1/bin:... some other stuff ...
Otra cosa que intenté es ejecutar sudo su -y luego escribir mvn --version. En este caso mvnse encuentra con éxito y el comando tiene éxito. ¿Que esta pasando aqui?

Respuestas:
$PATHes evaluado por su shell, por lo que su cheque no funciona como espera./etc/sudoersestá configurado para reemplazar suPATHcon uno predeterminado.sudono carga un entorno de shell de inicio de sesión antes de ejecutar el comando, por lo que se utiliza el valor predeterminadoPATHde/etc/sudoers.su -abre un shell de inicio de sesión, que implica la carga/etc/profile. Verman bashsección INVOCACIÓN .Simplemente elimine el
PATHreinicio/etc/sudoers. Es probable que se llame una reglasecure_path.CentOS
En CentOS puedes agregar
PATHa laDefaults env_keepsección:fuente
sudo: ./<some_binary>: command not found. Estoy usando Arch Linux.Da
sudotu corrientePATHcon:fuente
-Eopción además, para preservar el resto del medio ambiente. De hecho, esto es tan útil que se puede poner en un script / alias / función para facilitar su uso. Agregaré esto como una respuesta por separado, ¡pero felicitaciones a @opyate!env: cmd: No such file or directory- ¿Alguna idea de por qué sería?sudo: ./<some_binary>: command not found. Estoy usando Arch Linux.Desarrollando la respuesta de @ opyate, estoy usando el siguiente script de shell (que puede llamarse
mysudo, por ejemplo):-Ele dicesudoa preservar el medio ambiente.env "PATH=$PATH"se expande fuera de lasudollamada, haciendo que lo externoPATHesté disponible también dentro de la llamadasudo(esto se requiere además de-EquePATHgeneralmente recibe un tratamiento especial además del tratamiento que recibe todo el entorno)."$@"pasa los argumentos que recibe nuestro script a lasudolínea.Guarde el script en un archivo en un directorio en el
PATH, dele+xpermisos, y listo.fuente
Dado que las respuestas actuales son un poco vagas, la configuración específica para
/etc/sudoerscambiar su camino essecure_path:Puede modificarlo con
sudo visudo, o mejor aún, agregar los directorios que necesita:fuente
Tuve el mismo problema cuando instalé Maven por primera vez . El problema se resolvió después de agregar las dos líneas,
a cuatro archivos:
y para el usuario actual (
mehranes mi nombre de usuario de Ubuntu):fuente
Debe modificar la variable PATH de la raíz exactamente como lo hizo usted mismo, es decir , agregando esas dos líneas en el perfil de sudo, que se encuentra en /root/.bashrc, luego lo obtiene.
fuente
sudo source /root/.bashrcgets:sudo: source: command not foundy sin elsudopermiso denegado (como se esperaba). Creo que comenzar un nuevo terminal debería, en teoría, hacer lo mismo que la fuente, pero después de comenzar un nuevo terminal,sudo mvn --versiontodavía no encuentra nada.