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 mvn
instalado /tools/noarch/apache-maven-3.1.1
y 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 --version
el comando tiene éxito y mvn
ejecutable se encuentra, mientras que si ejecuto: sudo mvn --version
Me da la salida: sudo: mvn: command not found
. Sé que PATH
puede ser diferente cuando ejecuto un comando sudo
y 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 mvn
se encuentra con éxito y el comando tiene éxito. ¿Que esta pasando aqui?
Respuestas:
$PATH
es evaluado por su shell, por lo que su cheque no funciona como espera./etc/sudoers
está configurado para reemplazar suPATH
con uno predeterminado.sudo
no carga un entorno de shell de inicio de sesión antes de ejecutar el comando, por lo que se utiliza el valor predeterminadoPATH
de/etc/sudoers
.su -
abre un shell de inicio de sesión, que implica la carga/etc/profile
. Verman bash
sección INVOCACIÓN .Simplemente elimine el
PATH
reinicio/etc/sudoers
. Es probable que se llame una reglasecure_path
.CentOS
En CentOS puedes agregar
PATH
a laDefaults env_keep
sección:fuente
sudo: ./<some_binary>: command not found
. Estoy usando Arch Linux.Da
sudo
tu corrientePATH
con:fuente
-E
opció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):-E
le dicesudo
a preservar el medio ambiente.env "PATH=$PATH"
se expande fuera de lasudo
llamada, haciendo que lo externoPATH
esté disponible también dentro de la llamadasudo
(esto se requiere además de-E
quePATH
generalmente recibe un tratamiento especial además del tratamiento que recibe todo el entorno)."$@"
pasa los argumentos que recibe nuestro script a lasudo
línea.Guarde el script en un archivo en un directorio en el
PATH
, dele+x
permisos, y listo.fuente
Dado que las respuestas actuales son un poco vagas, la configuración específica para
/etc/sudoers
cambiar 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 (
mehran
es 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/.bashrc
gets:sudo: source: command not found
y sin elsudo
permiso 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 --version
todavía no encuentra nada.