¿Qué es PATH en Mac OS?

¿Qué es PATH en Mac OS? Lo he usado para instalar herramientas globales de línea de comandos, pero la única documentación que he encontrado son tutoriales para hacer precisamente eso, sin una explicación real de lo que está sucediendo. bajo el capó. Tampoco encontré una página relevante en Wikipedia .

Entonces, ¿cuál es el propósito de PATH ¿y cuál es la diferencia entre /etc/paths y ~/.bash_profile **?

Por ejemplo, en mi paths archivo, veo esto:

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

Pero en mi ~/.bash_profile, Veo esto:

# Setting PATH for Python 2.7 # The orginal version is saved in .bash_profile.pysave PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}" export PATH 

¿Es solo una adición específica del usuario al archivo paths? «¿Hay todo eso en paths, como /usr/bin?

Comentarios

  • Por favor, no ‘ t combine varias preguntas en una sola publicación. Cada una de sus preguntas sería bienvenida aquí por separado, pero no todas juntas de esta manera. Reduzca esto a una sola pregunta, podría combinar 1 y 2, pero las otras no tienen nada que ver con PATH específicamente. 3 se responde aquí 4 se explica aquí y 5 no tiene mucho sentido I ‘ tengo miedo. Tampoco su pregunta adicional, ¿qué archivos son binarios? Los scripts no lo son.
  • He editado mi pregunta. Además, encontré útiles esos enlaces. Gracias.

Responder

1. ¿Cuál es el propósito de PATH?

PATH es una variable de entorno que contiene una lista de directorios separados por dos puntos donde su shell buscará los ejecutables que usted nombre en la línea de comandos sin proporcionar un ruta explícita a ellos (como en su jsdoc ejemplo). Por lo tanto, si su PATH tiene

/usr/bin:/bin:/home/bin 

, cualquier ejecutable que llame por su nombre se buscará en estos directorios. (en ese orden) y el primer ejecutable encontrado es el ejecutado.

2. ¿Cuál es la diferencia entre / etc /path y ~ / .bash_profile

Según esta pregunta en ServerFault , /etc/paths se usa para configurar PATH globalmente (es decir, en todo el sistema, para todos los usuarios) mientras que ~/.bash_profile se usa para establecer preferencias por usuario (donde ~ será el directorio de inicio del usuario). Lo que está escrito en .bash_profile puede agregar al PATH global de /etc/paths o anularlo por completo.

Para el registro, /etc/paths parece ser una peculiaridad de MAC OS: no lo he encontrado en GNU / Linux, al menos.

Comentarios

  • Los acabo de editar, pero gracias por responderlos a todos.
  • @ggundersen Recorté mi respuesta para que se ajustara a su pregunta editada.
  • @ggundersen, es posible que también desee leer mi respuesta y th e incluye enlaces sobre /etc/paths en OSX.

Respuesta

¿Cuál es el propósito de PATH?

Así es como su shell busca programas. Cuando escribe ls, por ejemplo, se ejecuta un programa llamado ls que reside en /bin en la mayoría de los sistemas, incluido Mac OS X. Su shell solo puede encontrar eso porque /bin está en PATH.

El shell busca programas en PATH orden, de izquierda a derecha. Si hay dos programas ls en su sistema, y ambos directorios están en su PATH, encontrará el que se encuentra en el directorio listado. primero en su PATH.

¿Cuál es la diferencia entre / etc / rutas y ~ / .bash_profile

Las rutas establecidas en /etc/paths se agregan al PATH en inicio en todos los shells en Mac OS X.

~/.bash_profile es solo uno de varios scripts de shell ejecutados por Bash al inicio, y varios de estos son específicos de Bash. Por lo tanto, si cambia su shell — Mac OS X también incluye tcsh y zsh, por ejemplo, — los cambios realizados en /etc/bashrc no se aplican a su nuevo shell.

Además, /etc/paths es un archivo de configuración a nivel de sistema, mientras que ~/.bash_profile es por usuario. Si tuvieras varios usuarios interactivos configurados en tu Mac, no querrías agregar directorios a /etc/paths que no querías que aparecieran en todos «s PATH. Lo mismo es cierto para /etc/bashrc, excepto que, por supuesto, solo se aplica a los usuarios que usan Bash como su shell.

¿Cuál es la diferencia entre PATH y $ PATH y $ {PATH}?

Por lo general, solo ve el variable sin el sigilo cuando configura la variable. FOO=bar establece la FOO variable de entorno en la cadena bar. Si escribe set, el shell le muestra todas las variables de entorno y, en ese caso, también verá la variable sin ningún sigilo.

$PATH y ${PATH} suelen ser intercambiables. Indican al shell que expanda la PATH variable actual » s valor en el lugar. La diferencia tiene que ver con cómo y dónde los usa. Por ejemplo:

$ FOO=bar $ echo $FOO bar $ echo $FOOx $ echo ${FOO}x barx 

En el segundo comando echo, el shell no imprime nada porque le pide al shell que imprima una variable llamada FOOx, que no «existe; el shell trata las variables inexistentes como vacías. Porque la tercera echo usa la sintaxis de llaves , permite que el shell vea que está solicitando la variable FOO y que x es solo otro carácter que desea imprimir inmediatamente después .

Existe otra forma de obtener el mismo efecto sin llaves, por cierto:

$ echo "$FOO"x barx 

Las variables de entorno se expanden en comillas dobles, y las comillas separan x de la expansión de la variable para que el shell haga lo correcto.

Estoy usando FOO variable de entorno aquí solo para mayor claridad. Todo lo que he escrito anteriormente se aplica igualmente a , ya que es simplemente otra variable de entorno. Los textos de ejemplo serían mucho más largos.

¿Qué significa export PATH? ¿Cuándo exportamos?

Tomando el ejemplo anterior FOO, si tuviera que ejecutar otro programa, no vería la variable FOO porque no se exporta. Vive solo dentro de esa instancia de shell:

$ echo $FOO bar $ bash $ echo $FOO $ exit $ export FOO $ bash $ echo $FOO bar 

Cuando ejecuto por primera vez un nuevo bash shell debajo del que ya estaba usando, luego trato de mostrar el valor de FOO, obtenga un espacio en blanco porque FOO no se exportó para que los subprogramas lo vean. Luego salí de la segunda instancia de bash, la exporté, ejecuté bash nuevamente, y ahora la segunda instancia ve el valor de FOO.

Usas export cuando quieres que los subprogramas vean los valores establecidos en el shell y no los uses cuando no quiere que eso suceda.

Por lo general, no exporto variables temporales en scripts de shell, porque no quiero que cambien cómo se comportan los programas que se ejecutan desde ese script de shell.

No voy a responder ninguna de sus otras preguntas. Se supone que solo debe hacer una pregunta a la vez. Sólo he respondido a estos muchos porque «están vagamente relacionados. Todo lo demás pertenece a una pregunta separada.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *