¿Cómo agregar un directorio a la RUTA?

730

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

justingrif
fuente
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.

ko-dos
fuente
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
Ofidiana
fuente
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:

ish
fuente
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
    
woto
fuente
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)
dain
fuente
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.
Eduardo B.
fuente
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.

Ian B.
fuente
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.

ennuikiller
fuente
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.

3dinfluence
fuente
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í .

Vittorio Cecchetto
fuente
8
sudo vi /etc/profile.d/SCRIPT_NAME.sh

agregar allí

export PATH=YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH
Jorge Castro
fuente
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

Silversleevesx
fuente
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

Benny
fuente
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.

djavier
fuente
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).

Mikaela
fuente
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

sancho.s
fuente
-1

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

. ~/.bash_profile

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

Jorge Castro
fuente
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