¿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
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.
/etc/paths
en OSX.