0 votos

¿Es $PATH sólo un archivo con una lista (en orden de preferencia) de directorios?

Tengo problemas para entender exactamente cómo funciona $PATH.

Estoy en un Mac .. Si instalo Python con Homebrew, instalará Python en el directorio /opt/local/bin.

Ahora asumiendo que Homebrew no hizo ningún cambio en mi perfil de bash, si ejecuto un genérico Python script, que se ejecutará utilizando el sistema incluido Python ubicado en la Biblioteca creo.

Mi entendimiento es que si voy a mi perfil de bash y añadir esta línea:

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

entonces añadirá estos directorios al principio de la lista.

Supongo que la pregunta que tengo es: ¿por qué añado esta línea aquí? Por qué no puedo ir directamente a la fuente que creo que es $PATH y añadir la línea manualmente allí.
¿Es $PATH un archivo? Y si es así, ¿dónde se encuentra?

2voto

klanomath Puntos 19587

La ruta del shell (es decir, PATH) para un usuario en OSX es un variable definir un conjunto de ubicaciones en el sistema de archivos mediante el cual el usuario puede utilizar ciertas aplicaciones, comandos y shell scripts sin necesidad de especificar la ruta completa a ese comando o programa en el Terminal.

Si introduce abc en Terminal la primera aparición de abc en una de las rutas definidas en PATH se ejecutará.

Para acceder o imprimir la variable PATH hay que utilizar $PATH.

Ejemplo:

echo $PATH

La variable PATH tiene una parte general y otra específica del usuario.

1. Parte general:

La parte general está definida por el archivo (superior) /etc/rutas y por el contenido (inferior) de la carpeta /etc/rutas.d .

El contenido por defecto del archivo /etc/rutas (en OS X) es:

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

La carpeta por defecto /etc/rutas.d está vacío. En los sistemas más antiguos con una instalación X11 la carpeta contiene un archivo llamado 50-X11 con el contenido

/usr/X11/bin

que añade una ruta adicional ( /usr/X11/bin ) a PATH.

El preámbulo número- sólo define el orden de carga.

Mi /etc/rutas.d contiene los siguientes archivos:

/etc/paths.d/40-mysql    #file content: /usr/local/mysql/bin
/etc/paths.d/50-X11      #file content: /usr/X11/bin
/etc/paths.d/60-testdisk #file content: /usr/local/testdisk
/etc/paths.d/70-git      #file content: /usr/local/git/bin

El PATH resultante es

echo PATH$ 
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin:/usr/X11/bin:/usr/local/testdisk:/usr/local/git/bin

2. Parte específica del usuario:

La parte específica del usuario está definida por el archivo ~/.bash_profile . Si ha creado una carpeta bin en su carpeta de usuario y ha instalado algunas aplicaciones allí, puede añadir la siguiente línea en ~/.bash_profile

export PATH="/Users/username/bin:$PATH"

o

export PATH="$PATH:/Users/username/bin"

La primera entrada ejecuta preferentemente un comando abc encontrado en la carpeta /bin del usuario, el segundo un comando abc que se encuentra en la ruta general antes de ejecutar uno con el mismo nombre en la carpeta ~/bin.

Esta parte de PATH definida por .bash_profile sólo es efectiva para el usuario respectivo.

Para añadir la ruta introducida en .bash_profile al PATH actual inmediatamente tiene que originar el archivo una vez:

source ~/.bash_profile

3. Caminos temporales

Mediante la emisión de export PATH="/Users/username/bin:$PATH" o export PATH="$PATH:/Users/username/bin" en Terminal puedes añadir una ruta temporalmente.

Esta parte del PATH se pierde después de cerrar la ventana del Terminal, cerrar la sesión o reiniciar el Mac.

Ejemplos (utilizando la parte general de arriba):

El archivo ~/.bash_profile contiene export PATH="/Users/username/bin:$PATH" y emite en el Terminal export PATH="/Users/username/bin2:$PATH" entonces el PATH resultante es:

/Users/username/bin2:/Users/username/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin:/usr/X11/bin:/usr/local/testdisk:/usr/local/git/bin
\____temp. path_____/

El archivo ~/.bash_profile contiene export PATH="$PATH:/Users/username/bin" y emite en el Terminal export PATH="/Users/username/bin2:$PATH" entonces el PATH resultante es:

/Users/username/bin2:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin:/usr/X11/bin:/usr/local/testdisk:/usr/local/git/bin:/Users/username/bin
\____temp. path_____/

Resumen

PATH (o $PATH) está definido por varios archivos: /etc/paths, los archivos en /etc/paths.d y ~/.bash_profile y en caso de añadir una ruta temporal por el contenido adicional de la RAM.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X