21 Pregunta: ¿Cómo establecer permanentemente $ PATH en Linux / Unix?

pregunta creada en Fri, Jun 29, 2018 12:00 AM

Estoy tratando de agregar un directorio a mi ruta para que siempre esté en mi ruta de Linux. Lo he intentado:

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

Esto funciona, sin embargo, cada vez que salgo del terminal y comienzo una nueva instancia de terminal, esta ruta se pierde y debo ejecutar el comando de exportación nuevamente.

¿Cómo puedo hacerlo para que esto se establezca de forma permanente?

    
754
21 Respuestas                              21                         

Debe agregarlo a su archivo ~/.profile o ~/.bashrc.

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

Dependiendo de lo que estés haciendo, es posible que también quieras un enlace simbólico a los binarios:

 
cd /usr/bin
sudo ln -s /path/to/binary binary-name

Tenga en cuenta que esto no actualizará automáticamente su ruta por el resto de la sesión. Para hacer esto, debe ejecutar:

 
source ~/.profile 
or
source ~/.bashrc
    
932
2018-06-27 23: 25: 22Z
  1. Un par de preguntas. 1) ¿No debería haber dos puntos entre $PATH y /usr/bin? 2) Debería /usr/bin estar allí. 3) ¿No deberías usar /usr/local/bin?
    2014-01-11 00: 16: 04Z
  2. Tenga en cuenta : a menudo se considera un agujero de seguridad para dejar un punto final al final de su bash PATH porque hace que sea así como bash busca en el directorio actual si no puede encontrar el ejecutable que está buscando. Se debe informar a los usuarios que encuentren esta publicación en busca de más información.
    2014-01-14 00: 16: 00Z
  3. @ AdamRobertson Es insólito: considere el escenario cuando desempaquete un tarball, luego cd al directorio donde lo desempaquetó, luego ejecute ls --- y luego se da cuenta de que el archivo tar tenía un programa malicioso llamado ls en él.
    2014-02-27 00: 39: 17Z
  4. Para mí fue .bash_profile, no .profile. Parece que esto es diferente para todos.
    2014-04-09 01: 08: 27Z
  5. Creo que mejoré significativamente la calidad de esta respuesta y resolví algunos problemas que otros usuarios mencionaron. Cada exportación de ruta, o cada comando que ajusta la ruta, siempre debe asegurarse de separar una ruta existente con dos puntos. Los dos puntos iniciales o finales nunca se deben usar, y el directorio actual nunca debe estar en la ruta.
    2014-09-04 17: 43: 47Z

En Ubuntu, edita /etc/environment. Su único propósito es almacenar variables de entorno. Originalmente, la variable $PATH se define aquí. Esto es una pasta de mi archivo /etc/environment:

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

Así que puedes abrir este archivo como root y agregar lo que quieras.

Para resultados inmediatos, Ejecutar (intente como usuario normal y root):

 
source /etc/environment && export PATH

ACTUALIZAR:

Si usa zsh (a.k.a Z Shell), agregue esta línea justo después de los comentarios en /etc/zsh/zshenv:

 
source /etc/environment

Encontré esta pequeña peculiaridad en Ubuntu 15.10, pero si zsh no está obteniendo el PATH correcto, esta podría ser la razón

    
230
2018-10-08 07: 35: 31Z
  1. No todos los sistemas tienen /etc /environment
    2014-11-14 17: 20: 06Z
  2. FWIW $PATH también se define en /etc/profile en Arch Linux.
    2015-02-24 01: 57: 26Z
  3. @ e-sushi Estoy realmente sorprendido por eso. Yo mismo estoy en Ubuntu 14.04.1. Y puedo prometerte que el archivo se incorporó.
    2015-02-28 12: 18: 53Z
  4. Después de probar todas las sugerencias bajo el sol, pero /etc /environment, y hacer que todas NO funcionen, finalmente me topé con esto. También estoy en Ubuntu 14.04 y este es el único que realmente cambió la variable PATH después de los reinicios.
    2015-03-24 16: 21: 12Z
  5. El usuario debe reiniciar la PC después de actualizar el archivo de entorno.
    2016-03-24 17: 50: 18Z

Hay múltiples formas de hacerlo. La solución real depende del propósito.

Los valores de las variables generalmente se almacenan en una lista de asignaciones o en un script de shell que se ejecuta al inicio del sistema o la sesión del usuario. En el caso del script de shell, debe utilizar una sintaxis de shell específica.

En todo el sistema

  1.  /etc/environment Lista de asignaciones únicas. Perfecto para agregar directorios de todo el sistema como /usr/local/something/bin a PATH variable o definir JAVA_HOME.
  2.  /etc/xprofile Shell script ejecutado al iniciar sesión de X Window System. Esto se ejecuta para todos los usuarios que inician sesión en X Window System. Es una buena opción para PATH entradas que son válidas para todos los usuarios como /usr/local/something/bin. El archivo está incluido en otra secuencia de comandos, así que use la sintaxis de shell POSIX, no la sintaxis de su shell de usuario.
  3.  /etc/profile y /etc/profile.d/* shell script. Esta es una buena opción para sistemas de solo shell. Esos archivos se leen solo por shells.
  4.  /etc/<shell>.<shell>rc. Shell script. Esta es una mala elección porque es específica de una sola shell.

Sesión de usuario

  1.  ~/.pam_environment. Lista de tareas únicas. Cargado por PAM al inicio de cada sesión de usuario irrelevante si se trata de una sesión o shell de X Window System. No puede hacer referencia a otra variable, incluidas HOME o PATH, por lo que tiene un uso limitado.
  2.  ~/.xprofile shell script. Esto se ejecuta cuando el usuario inicia sesión en el sistema X Window System. Las variables definidas aquí son visibles para cada aplicación X. La opción perfecta para extender PATH con valores como ~/bin o ~/go/bin o definir el usuario específico GOPATH o NPM_HOME. El archivo está incluido en otra secuencia de comandos, así que use la sintaxis de shell POSIX, no la sintaxis de su shell de usuario. Su editor de texto gráfico o IDE iniciado por acceso directo verá esos valores.
  3.  ~/.profile shell script. Solo será visible para los programas iniciados desde el terminal o el emulador de terminal. Es una buena opción para sistemas de solo shell.
  4.  ~/.<shell>rc. Shell script. Esta es una mala elección porque es específica de una sola shell.

Documentación específica de distribución

145
2016-01-15 13: 43: 24Z
  1. Gracias por la respuesta detallada, esto debería ser más alto. ¿Quizás también debería agregarse .bash_profile a la lista?
    2016-11-11 23: 12: 15Z
  2. @ JamesKo que era el número 4
    2016-11-14 04: 11: 49Z
  3. Creo que se sugiere la mejor respuesta /etc/environment. ¿Pero puedo actualizarlo sin cerrar sesión y entrar? A veces no uso bash o sh, por lo que source /etc/environment no funciona.
    2018-04-08 20: 22: 58Z
  4. Genial y en mi opinión, la respuesta más completa. Debería ser mucho más arriba.
    2018-06-13 18: 23: 42Z
  5. Mi razón para buscar este tema fue en realidad Go. Me alegra ver que no soy el único que se dio cuenta de que .bashrc no es el lugar correcto.;)
    2018-06-13 18: 34: 03Z

Ponga la declaración export en ~/.bashrc. Mi .bashrc contiene esto:

 
export PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATH
    
67
2013-02-01 00: 59: 39Z
  1. ¿es necesario reiniciar?
    2013-02-01 01: 01: 45Z
  2. Funcionó cuando puse esto en el .profile ', no encontré .bashrc
    2013-02-01 01: 10: 59Z
  3. Puede depender del sistema exacto; No estoy seguro exactamente qué condiciones determinan qué archivo se ejecuta. Me alegro de que el problema se resolvió, sin embargo.
    2013-02-01 02: 10: 02Z
  4. @ Click Upvote Necesitas hacer source ~/.bashrc para volver a cargar la configuración .bashrc. Entonces funcionará
    2014-04-06 06: 02: 31Z
  5. La palabra clave export solo es necesaria si PATH ya no está marcada como una variable de entorno, lo que será casi incondicional. Simplemente PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATH tendría el mismo efecto.
    2014-10-04 17: 20: 35Z

Puedes configurar $PATH permanentemente de 2 maneras.

  1. Para establecer la ruta para un usuario en particular: Es posible que deba hacer la entrada en .bash_profile en el directorio de inicio del usuario.

    , por ejemplo, en mi caso, estableceré la ruta de Java en el perfil de usuario de Tomcat

     
    [tomcat]$ echo "export PATH=$PATH:/path/to/dir" >> /home/tomcat/.bash_profile
    
  2. Para establecer una ruta común para TODOS los usuarios del sistema, es posible que deba establecer una ruta como esta:

     
    [root~]# echo "export PATH=$PATH:/path/to/dir" >> /etc/profile
    
29
2015-02-25 16: 54: 14Z
  1. ¿Está el archivo llamado /etc/profiles con un s en su distribución? El mío no tiene s. Creo que tienes un error tipográfico.
    2014-10-16 13: 36: 41Z
  2. Probablemente quiera escapar de los $que está escribiendo en el archivo de perfil. p.ej. echo "export PATH = \$PATH: /path /to /dir" > > /etc /profile, de esa manera usted realmente agrega a la variable cuando ese script se ejecuta en lugar de establecerlo en un valor literal basado en su valor al momento de ejecutar este comando inicial.
    2016-01-20 15: 12: 37Z

Puede usar en Centos o RHEL para usuarios locales:

 
echo $"export PATH=\$PATH:$(pwd)" >> ~/.bash_profile

Esto agrega el directorio actual (o puede usar otro directorio) a la RUTA, esto lo hace permanente pero tendrá efecto en el próximo inicio de sesión del usuario.

Si no desea volver a iniciar sesión, puede usar:

 
source ~/.bash_profile

Que vuelve a cargar el # User specific environment and startup programs este comentario está presente en .bash_profile

    
12
2016-10-21 04: 11: 17Z

También puede establecer de forma permanente, editando uno de estos archivos:

/etc/profile (para todos los usuarios)

~/.bash_profile (para el usuario actual)

~/.bash_login (para el usuario actual)

~/.profile (para el usuario actual)

También puede usar /etc/environment para establecer una variable de entorno PATH permanente, pero no admite la expansión de variables .

Extraído de: http: //www.sysadmit .com /2016/06 /linux-anadir-ruta-al-path.html

    
9
2018-09-14 18: 58: 12Z

Puede agregar esa línea a su archivo de configuración de la consola (por ejemplo, .bashrc), o a .profile

    
6
2013-02-01 00: 59: 22Z
  1. No tengo ninguno de esos archivos en /home/(username)
    2013-02-01 01: 03: 23Z
  2. @ ClickUpvote: ¿Qué shell usas? (Y los archivos que comienzan con un punto están ocultos, necesita algo como ls -a para verlos).
    2013-02-01 01: 05: 35Z
  3. Veo .profile en una segunda mirada. Trabajaba ahora, ty.
    2013-02-01 01: 10: 35Z
  4. En caso de que no tenga ninguno de esos archivos (bashrc o perfil), puede crearlos manualmente y se usarán automáticamente
    2014-09-07 01: 20: 05Z

Me encontré con esta pregunta ayer al buscar una manera de agregar una carpeta que contenga mis propios scripts al PATH, y me sorprendió descubrir que mi propio archivo ~/.profile (en Linux Mint 18.1) ya contenía esto:

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

Por lo tanto, todo lo que tenía que hacer era crear la carpeta ~/bin y colocar mis scripts allí.

    
6
2017-03-04 11: 09: 57Z

Creo que la forma más elegante es:

1.add esto en el archivo ~ /.bashrc    Ejecuta este comando

  

gedit ~ /.bashrc

agrega tu camino en su interior

  

export PATH = $PATH: /opt /node /bin

2.source ~ /.bashrc

(Ubuntu)

    
6
2018-06-07 05: 51: 40Z

los archivos en los que agrega el comando de exportación dependen de si está en modo de inicio de sesión o en modo de no inicio de sesión.

si está en modo de inicio de sesión, los archivos que busca son /etc /bash o /etc/bash.bashrc

si no está en modo de inicio de sesión, está buscando el archivo /.profile o los archivos dentro del directorio /.profiles.d

los archivos mencionados anteriormente si están las variables del sistema.

    
3
2013-11-05 13: 35: 33Z

Agregar permanentemente la variable PATH

Global:

 
echo "export PATH=$PATH:/new/path/variable" >> /etc/profile

Local (solo para usuarios):

 
echo "export PATH=$PATH:/new/path/variable" >> ~/.profile

Para reiniciar global . Para local reiniciar sesión.

Ejemplo

Antes :

 
$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin

After:

 
$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable

También puedes editar el perfil:

 
$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable

Otra forma (gracias gniourf_gniourf):

 
echo 'PATH=$PATH:/new/path/variable' >> /etc/profile
  

¡No deberías usar comillas dobles aquí! exportación de eco   PATH = $PATH: /new /path /variable '... Y, por cierto, la palabra clave de exportación   es muy probable que sea inútil ya que la variable PATH es muy probable ya   Marcado como exportado. - gniourf_gniourf

    
3
2014-11-14 18: 19: 11Z
  1. No. No deberias usar doucita aquí! echo 'export PATH=$PATH:/new/path/variable' ... Y, por cierto, es muy probable que la palabra clave export sea inútil, ya que es muy probable que la variable PATH ya esté marcada como exportada.
    2014-11-14 17: 48: 08Z
  2. No, debería usar comillas dobles porque $PATH entre comillas simples no se han interpolado. Y BTW también es útil para la exportación.
    2014-11-14 17: 58: 22Z
  3. Lo tengo. Puede usar comillas dobles o comillas simples, porque $PATH se interpola cuando se ejecuta el eco o se interpola cuando se ejecuta /etc /profile.
    2014-11-14 18: 14: 50Z
  4. @ user3439968 en realidad, las comillas dobles causarán muchos problemas si tuviera que adjuntar a $PATH desde varios archivos. Considere: cuando usa comillas dobles, $PATH se traduce a una cadena estática con todos los directorios PATH definidos previamente. Dígale que le agrega /usr/local usando ~/.bashrc. ahora si pretende agregar /opt/bin a la misma variable usando /etc/bash.bashrc; $PATH se traducirá a la misma cadena estática, por lo que $PATH se reemplazará en lugar de agregarse a ... Será una cuestión de preferencia del sistema a un archivo sobre otro
    2015-01-27 16: 20: 10Z

Zues77 tiene la idea correcta. El OP no dijo "cómo puedo hackear mi camino a través de esto". OP quería saber cómo agregar permanentemente a $PATH:

 
sudo nano /etc/profile

Aquí es donde está configurado para todo y es el mejor lugar para cambiarlo para todas las cosas que necesitan $PATH

    
3
2015-09-25 02: 26: 23Z

Mi respuesta se refiere a la configuración de go-lang en Ubuntu linux/amd64. Me he enfrentado a la misma dificultad de configurar la ruta de las variables de entorno (GOPATH y GOBIN), perdiéndola en la salida del terminal y reconstruyéndola usando el source <file_name> cada vez .El error fue poner la ruta (GOPATH y GOBIN) en la carpeta ~/.bash_profile. Después de perder unas buenas horas, encontré que la solución era colocar GOPATH y GOBIN en el archivo ~/.bash_rc de la manera:

 
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOPATH:$GOBIN

y al hacerlo, la instalación de Go funcionó bien y no hubo pérdidas de trayectoria.

EDIT 1: La razón por la que se puede relacionar este problema es que las configuraciones para shells que no son de inicio de sesión, como su terminal ubuntu o gnome-terminal donde ejecutamos el código go, se toman del archivo ~./bash_rc y las configuraciones para shells de inicio de sesión se toman del archivo ~/.bash_profile, y Archivo ~/.profile si el archivo ~/.bash_profile no está disponible.

    
3
2017-05-04 21: 38: 21Z

1.modifique el archivo "/etc /profile".

 
#vi /etc/profile

Presiona la tecla "i" para ingresar al estado de edición y mover el cursor al final del archivo, entradas adicionales :

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

Presione la tecla "Esc" para salir del estado de edición, ': wq' guardar el archivo.

2.Haga la configuración efectiva

 
source /etc/profile

Explica :  el archivo de perfil funciona para todos los usuarios, si desea ser válido solo para el usuario activo, configure el archivo ".bashrc"

    
3
2018-11-23 09: 24: 45Z

la mejor forma simple es la siguiente línea:
PATH="<directory you want to include>:$PATH"
en su archivo .bashrc en el directorio de inicio.
No se restablecerá incluso si cierra el terminal o reinicia su PC. Es permanente

    
2
2014-10-04 16: 38: 30Z
  1. Esto no nos dice nada sobre cómo hacerlo permanente.
    2014-04-27 04: 54: 26Z
  2. @ quant si hace lo que se dice, establecerá su configuración de forma permanente. funcionará incluso si cierra el terminal.
    2014-10-04 16: 37: 25Z

Agregue a la carpeta /etc/profile.d el script [name_of_script].sh con la línea: export PATH=$PATH:/dir. Cada script dentro de la carpeta /etc/profile.d es ejecutado automáticamente por /etc/profile al iniciar sesión.

    
2
2015-04-10 12: 12: 15Z
  1. Se recomienda la forma de personalizar su entorno
    2015-04-10 12: 14: 35Z
  2. Esto es solo si desea que la configuración sea para todo el sistema, lo que probablemente no sea el caso de uso más común. La mayoría de la gente quiere (o debería) que la ruta se establezca localmente, porque la mayoría de los usuarios /roles están realizando operaciones contextualmente diferentes, y cuantas menos suposiciones haga, mejor.
    2015-04-10 20: 25: 49Z
  3. @ mpowered, sí, esto es solo para todo el sistema. Si desea cambiar localmente el PATH, debe agregar la misma exportación en ~ /.profile o ~ /.bashrc. Aquí debe considerar que los shells de inicio de sesión leen ~ /.profile y los shells interactivos leídos ~ /.bashrc. Esto es muy importante porque, por ejemplo, ssh no hace un inicio de sesión, por lo tanto, no se leerá ~ /.profile. Varias distribuciones como fuente de fuente ~ /.bashrc en /etc /profile. Pero no es común para todos los linux '
    2015-04-15 09: 49: 05Z

Creo que la forma más elegante es:

1. Agregue esto en el archivo ~. /bashrc

 
if [ -d "new-path" ]; then
  PATH=$PATH:new-path
fi

2.source ~/.bashrc

(Ubuntu)

    
1
2016-07-17 02: 50: 27Z
  1. Y para mostrar la ruta más arriba: printf "% s \n" $PATH
    2018-06-15 18: 44: 24Z

una forma de agregar una ruta permanente, que funcionó para mí, es:     cd /etc/profile.d     toque custom.sh     vi custom.sh     export PATH = $PATH: /path de acuerdo a su configuración / Reinicie su computadora y aquí vamos camino habrá allí permanentemente saludos.

    
0
2016-05-28 03: 19: 04Z

Para la distribución de Debian, tienes que:

 
    - edit ~/.bashrc  e.g: vim ~/.bashrc 
    - add export PATH=$PATH:/path/to/dir
    - then restart your computer. Be aware that if you edit ~/.bashrc  as root, your environment variable you added will work only for root
    
0
2017-12-27 21: 18: 00Z

Se puede agregar directamente usando el siguiente comando:

echo 'export PATH = $PATH: /new /directory' > > ~ /.zshrc fuente ~ /.zshrc

    
- 2
2016-07-11 11: 31: 39Z
  1. La pregunta tiene la etiqueta bash, por lo que no es muy útil.
    2016-07-11 11: 38: 14Z
  2. Esta es una respuesta válida - > el título solo menciona a Linux, así que bash y TAMBIÉN zsh lo harán ... si el etiquetado es solo "bash" necesitamos agregar "zsh" a las etiquetas también
    2018-02-02 15: 04: 13Z
fuente colocada aquí