¿Cómo agregar un directorio a la RUTA?


730

¿Cómo agrego un directorio al $PATHen Ubuntu y hago los cambios permanentes?


2
help.ubuntu.com/community/EnvironmentVariables Hay todo lo que necesita saber. Descubrí que muchas de las entradas aquí eran incorrectas o al menos no se sugirió el método. Esta es una gran información que le permitirá averiguar dónde modificar su variable de entorno en función de la razón por la que lo está haciendo y exactamente cómo hacerlo sin arruinar todo (como hice siguiendo algunos de los malos consejos antes mencionados). ¡Hasta luego y gracias por todos los pescados!
Bus42

Respuestas:


455

Usando ~ / .profile para establecer $ PATH

Una ruta establecida .bash_profilesolo se establecerá en un shell de inicio de sesión bash ( bash -l). Si coloca su ruta .profile, estará disponible para su sesión de escritorio completa. Eso significa que incluso metacity lo usará.

Por ejemplo ~/.profile:

if [ -d "$HOME/bin" ] ; then
  PATH="$PATH:$HOME/bin"
fi

Por cierto, puede verificar la variable PATH de un proceso mirando su entorno en /proc/[pid]/environ(reemplace [pid] con el número de ps axf). Ej. Usogrep -z "^PATH" /proc/[pid]/environ

Nota:

bashcomo un shell de inicio de sesión no se analiza .profilesi existe .bash_profileo no .bash_login. De man bash:

busca ~ / .bash_profile, ~ / .bash_login y ~ / .profile, en ese orden, y lee y ejecuta comandos desde el primero que existe y es legible.

Ver las respuestas a continuación para obtener información sobre .pam_environment, o .bashrcen los depósitos interactivo de no ingreso, o establecer el valor global para todos los usuarios, poniendo una secuencia de comandos en /etc/profile.d/o utilizar /etc/X11/Xsession.d/para afectar a la sesión de los gestores de visualización.


55
Genial, eso funcionó. Vi dónde agregará automáticamente el directorio bin si lo hago, así que solo usé eso en lugar de scripts. TY.
justingrif el

55
En Xbunutu .profile no se ejecuta, así que lo puse en .bashrc y funciona.
tekumara

13
Esta documentación está muy bien hecha: documentación oficial sobre la variable de entorno . Considere leerlo (por no decir que se actualiza a la última versión de las reglas para agregar valores a la variable de entorno).
Michele

3
¿Dónde en .profile agregamos la ruta?
Vineet Kaushik

3
Todavía no tengo idea de dónde agregar mi parte de ruta adicional. Necesito agregar el SDK de Android a mi ruta ... PATH="$HOME/bin:$PATH"¿Entonces lo agrego?
Jamie Hutber

303

Edite .bashrcen su directorio personal y agregue la siguiente línea:

export PATH="/path/to/dir:$PATH"

Deberá obtener su origen .bashrco cerrar sesión / iniciar sesión (o reiniciar el terminal) para que los cambios surtan efecto. Para obtener su fuente .bashrc, simplemente escriba

$ source ~/.bashrc

3
¿Cómo "fuente su .bashrc"? ¿Cómo se "reinicia el terminal"?
isomorphismes

3
En bash es simplemente '. .bashrc'
Ophidian

1
Estaba asumiendo que estabas en tu directorio personal. ya que ahí es donde está el .bashrc que desea editar.
Ophidian

21
.bashrcNo es el lugar adecuado para establecer variables de entorno. Deberían entrar .profileo .pam_environment. Ver mywiki.wooledge.org/DotFiles
geirha

44
@LaoTzu . .bashrcno .bashrc:) o source .bashrcpara el caso
Znarkus

120

El lugar recomendado para definir las variables de entorno permanentes de todo el sistema que se aplican a todos los usuarios es:

/etc/environment

(que es donde PATHse define el valor predeterminado )

Esto funcionará en escritorio o consola, gnome-terminal o TTY, llueva o truene;)

  • Para editar, presione Alt+ F2y escriba:

    gksudo gedit /etc/environment
    

    (o abra el archivo con sudosu editor de texto favorito)

Para efectuar cambios, ejecute . /etc/environment. Como este archivo es solo un script simple, se ejecutará y asignará la nueva ruta a la PATHvariable de entorno. Para verificar, ejecute env y vea el PATHvalor en el listado.

Relacionado:


66
y luego necesita reiniciar para que los cambios surtan efecto ...
Lee

2
Esto es exactamente lo que necesitaba. Se aprovisionó una imagen vm desechable a través de vagabundo y se necesitaba agregar nodo y npm a la ruta.
Austin Pray

77
Para tomar los cambios en efecto, ejecute. / etc / environement (sí, punto, un espacio y / etc / environment). Dado que este archivo es solo un script simple, se ejecutará y asignará la nueva ruta a la variable de entorno PATH. Para verificar, ejecute env y vea el valor de RUTA en el listado.
WindRider

1
Necesitaba correr source /etc/environmentpara recargar los cambios
JohnnyAW

@JohnnyAW: la fuente es equivalente al punto inicial, ver por ejemplo en.wikipedia.org/wiki/Source_(command) .
Roland Sarrazin

58

Creo que la forma canónica en Ubuntu es:

  • crear un nuevo archivo en /etc/profile.d/

    sudo vi /etc/profile.d/SCRIPT_NAME.sh
    
  • agregar allí:

    export PATH="YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH"
    
  • y darle permiso de ejecución

    sudo chmod a+x /etc/profile.d/SCRIPT_NAME.sh
    

20
Por lo general, es más seguro agregar su ruta personalizada al final de PATH en lugar de al principio. Esto evita reemplazar accidentalmente los comandos del sistema con sus programas (o los programas maliciosos de otra persona). Esto también evita mucha confusión cuando alguien más trabaja en su sistema (o le da consejos) y obtiene resultados inesperados de los comandos que ha "reemplazado".
Joe

47

Para novatos completos (como yo) que se sienten más cómodos con GUI:

  1. Abre tu $HOMEcarpeta.
  2. Vaya a VerMostrar archivos ocultos o presione Ctrl+ H.
  3. Haga clic derecho .profiley haga clic en Abrir con editor de texto .
  4. Desplácese hasta la parte inferior y agregue PATH="$PATH:/my/path/foo".
  5. Salvar.
  6. Cierre la sesión y vuelva a iniciarla para aplicar los cambios (deje que Ubuntu se cargue .profile)

44
Ya no se recomienda editar el archivo .profile. Todavía puede usar este método para editar el archivo .pam_environment, consulte: help.ubuntu.com/community/EnvironmentVariables
PulsarBlow

Gracias @PulsarBlow! Sin embargo, no estoy seguro de cuál es exactamente la diferencia y el beneficio ... Esta es la URL directa a la sección correspondiente: help.ubuntu.com/community/…
fecha

1
Esta respuesta hizo que mi sistema dejara de iniciar sesión debido a que todas las rutas se anulaban. Usando Ubuntu 16.04.
Frisbetarian

1
@Frisbetarian, debe asegurarse de agregar el $PATH:bit que incluye la definición de RUTA existente
desde el

@dain: ¡tu comentario me salvó la vida!
Py-ser

46

Para variables de entorno persistentes disponibles solo para usuarios particulares. Recomiendo mucho la documentación oficial de Ubuntu.

https://help.ubuntu.com/community/EnvironmentVariables

En referencia a la documentación anterior, configuré mis herramientas de ruta del SDK de Android de la siguiente manera:

  1. creando ~/.pam_environmentarchivo en el directorio de inicio.
  2. el contenido del cual es PATH DEFAULT=${PATH}:~/android-sdk-linux/tools.
  3. Se puede agregar una ruta de usuario personalizada adicional separando las rutas con dos puntos (:) .
  4. esto requiere volver a iniciar sesión , lo que significa que debe cerrar sesión y volver a iniciar sesión en el entorno de escritorio.

1
Esta es la mejor respuesta.
Paulo Coghi

26

Pon esa línea en tu ~/.bashrcarchivo.

Se obtiene cada vez que abre una terminal

EDITAR : según los comentarios a continuación, para una configuración más general que se aplicará a todos los shells (incluso cuando presionas Alt- F2en Unity), agrega la línea a tu ~/.profilearchivo. Sin embargo, probablemente no debería hacer ambas cosas, ya que la ruta se agregará dos veces a su PATHentorno si abre una terminal.


1
En realidad, pensé que estableciste el camino $HOME/.profilepara la configuración personal o /etc/profilepara todos los usuarios. Pero si solo es necesario para bash, supongo que cualquiera funcionará.
Marty Fried

1
Si lo configura ~/.bashrc, solo estará disponible en los terminales que abra. Por ejemplo, si presiona Alt + F2 e intenta ejecutar un comando desde ese directorio, no lo encontrará. Si lo configura en ~/.profileo ~/.pam_environment, la sesión de gnome (o cualquier DE que use) lo heredará. Agregar PATH ~/.bashrctambién tiene el inconveniente de que si abre / exec bash de manera interactiva desde otro shell bash interactivo, se agregará varias veces.
geirha

2
Realmente no he investigado esto por un tiempo, así que hice una búsqueda, y parece que hay al menos 95 formas diferentes de establecer el camino, la mayoría de las cuales se discuten aquí . Nunca descubrí cuál es el mejor. Sin ~/.profileembargo, creo que es correcto para los caminos personales; ahí es donde Ubuntu agrega el ~/bindirectorio. Y confieso que exageré un poco en la cantidad de formas, solo un poco.
Marty Fried

1
@MartyFried, sí, para citar el bot en #bash en freenode: «La abrumadora mayoría de los scripts, códigos, tutoriales y guías de bash son basura. Sturgeon era optimista. »Al usar google para un problema bash, a menudo encontrarás muchas soluciones a medias antes de encontrar una buena. Ah, y yo también iría ~/.profileen este caso.
geirha

1
@geirha: estoy de acuerdo en que la mayoría de las guías en Internet en general son probablemente basura, especialmente cualquier cosa de Linux, ya que diferentes distribuciones, o incluso diferentes versiones de la misma, hacen las cosas de manera diferente. Por lo general, se reduce a lo que funciona, pero la mayoría de las personas no se dan cuenta de que lo que funciona es simplemente lo que funciona, no necesariamente lo que está bien o incluso lo que siempre funcionará. Trato de averiguar cuál de las muchas formas es correcta, porque odio hacer las cosas más de una vez, pero no siempre es fácil. :)
Marty Fried

15

Para configurarlo en todo el sistema, agregue la línea export PATH=/path/you're/adding:$PATHal final de /etc/profile.

Para agregar el directorio solo para el usuario conectado, agregue la misma línea a ~/.bash_profile.


14

Agregarlo a .bashrc funcionará, pero creo que la forma más tradicional de configurar las variables de ruta es en .bash_profile agregando las siguientes líneas.

PATH=$PATH:/my/path/foo
export PATH

Según este hilo , parece que el comportamiento de Ubuntu es ligeramente diferente al de RedHat y los clones.


1
No tengo un .bash_profile, ¿debería crearlo?
justingrif

77
Si es así .bashrc, pégalo en su .bashrclugar. Los terminales GUI en Ubuntu no son shells de inicio de sesión, por .bash_profilelo que no se ejecutarán.

1
No estoy ejecutando un gui shell. Pero desde el hilo de arriba parece que .bashrc funcionará bien.
justingrif el

2
Ambos funcionarán si su shell es un shell de inicio de sesión. Pero acabo de probar el enfoque .bash_profile en una de mis máquinas Ubuntu e incluso después de reiniciar mi sesión de gnome no obtuvo mi .bash_profile. Entonces diría que poner esto en .bashrc es probablemente la forma de hacerlo con Ubuntu.
3dinfluence

3
@justingrif No, no lo necesitas .bash_profile. Si bash no encuentra un .bash_profile(cuando inicia sesión de forma interactiva), lo buscará .profiley usará en su lugar. Por defecto, tendrás un .profiley .bashrcen Ubuntu. Y .profilees el lugar correcto para establecer variables de entorno si ignoramos pam_env.
geirha

10

En terminal, cdathe_directory_you_want_to_add_in_the_path

echo "export PATH=$(pwd):\${PATH}" >> ~/.bashrc

Esta no fue mi idea. Encontré esta forma de exportar ruta en este blog aquí .


8
sudo vi /etc/profile.d/SCRIPT_NAME.sh

agregar allí

export PATH=YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH

2
sudo nano /etc/profile.d/SCRIPT_NAME.shEs más fácil para los principiantes.
isomorphismes

1
Para principiantes, gksu gedit /etc/profile.d/SCRIPT_NAME.shes aún más fácil.
Fouric

6

Cada vez que "instalo" mi carpeta de scripts BASH, sigo el patrón de la prueba para una $HOME/bincarpeta que se encuentra en la mayoría de los archivos .profile en versiones recientes de Ubuntu. Puse una prueba que se parece a

if [ -d "/usr/scripts" ]; then
   PATH="/usr/scripts:$PATH"
fi

Funciona casi el 100% del tiempo, y me deja libre de cambiarlo en un editor de texto GUI con un rápido "Reemplazar todo" si alguna vez decidiera moverme a /scriptsalgún lugar más cerca de mi $HOMEcarpeta. No lo he hecho en 6 instalaciones de Ubuntu, pero hay "siempre mañana". S

BZT


6

El método recomendado para editar su PATHes de /etc/environmentarchivo

Ejemplo de salida de /etc/environment:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Por ejemplo, para agregar la nueva ruta de /home/username/mydir

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/mydir"

Luego, reinicie su PC.


Variables de entorno de todo el sistema

Un archivo adecuado para la configuración de las variables de entorno que afectan al sistema en su conjunto (en lugar de solo a un usuario en particular) es / etc / environment. Una alternativa es crear un archivo para ese propósito en el directorio /etc/profile.d.

/ etc / environment

Este archivo está específicamente diseñado para configuraciones variables de entorno de todo el sistema. No es un archivo de script, sino que consiste en expresiones de asignación, una por línea.

Nota: La expansión variable no funciona en / etc / environment.

Más información se puede encontrar aquí: EnvironmentVariables


1
La respuesta más baja pero la más correcta. Este archivo generalmente se rellena automáticamente bin Ubuntu con la ruta.
NotoriousPyro

4

Abra su terminal, escriba gedit .profilee inserte lo siguiente:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$PATH:$HOME/bin"
fi

 #the following line add Bin where you dont have a Bin folder on your $HOME
    PATH="$PATH:/home/mongo/Documents/mongodb-linux-i686-2.2.2/bin"

Cierre y abra la terminal, debería estar funcionando.


2

Póngalo en su ~/.bashrco en cualquier parte que use rc (o antes mencionado ~/.profile) Y ~/.xsessionrcasí también funcionará en X (fuera del shell).


1

Incluso si las secuencias de comandos del sistema no usan esto, en cualquiera de los casos en los que se desea agregar una ruta (por ejemplo, $HOME/bin) a la variable de entorno PATH, se debe usar

PATH="${PATH:+${PATH}:}$HOME/bin"

para anexar (en lugar de PATH="$PATH:$HOME/bin"), y

PATH="$HOME/bin${PATH:+:${PATH}}"

para anteponer (en lugar de PATH="$HOME/bin:$PATH").

Esto evita el colon espurio $PATHinicial / final cuando está inicialmente vacío, lo que puede tener efectos no deseados.

Ver, por ejemplo, https://unix.stackexchange.com/questions/162891/append-to-path-like-variable-without-creating-leading-colon-if-unset


-1

Para Ubuntu edite ~/.bashrcy agregue la siguiente línea.

. ~/.bash_profile

Luego edite su .bash_profile como lo necesite .....


1
Votado en contra porque no explicaste cómo "editar .bash_profilelo que necesitas". ¿Qué necesito hacer exactamente con el .bash_profile?
isomorphismes

44
Este es el camino equivocado. .profileo .bash_profiledebe fuente .bashrc. No de la otra manera.
geirha
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.