¿Qué es el PATHen un 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 sucede debajo del capó. Tampoco he encontrado una página relevante en Wikipedia .
Entonces, ¿cuál es el propósito PATHy cuál es la diferencia entre /etc/pathsy ~/.bash_profile**?
Por ejemplo, en mi pathsarchivo, 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 esto solo una adición específica del usuario al pathsarchivo? ¿Qué es todo eso en paths, como /usr/bin?

Respuestas:
1. ¿Cuál es el propósito de PATH?
PATHes una variable de entorno que contiene una lista de directorios separados por dos puntos donde su shell buscará los ejecutables que nombre en la línea de comandos sin proporcionarles una ruta explícita (como en sujsdocejemplo). Por lo tanto, siPATHtieneentonces se buscará cualquier ejecutable que llame por nombre en estos directorios (en ese orden) y el primer ejecutable encontrado es el ejecutado.
2. ¿Cuál es la diferencia entre / etc / paths y ~ / .bash_profile
De acuerdo con esta pregunta en ServerFault ,
/etc/pathsse usa para establecerPATHglobalmente (es decir, en todo el sistema, para todos los usuarios) mientras~/.bash_profilese usa para establecer las preferencias por usuario (donde~estará el directorio de inicio del usuario). ¿Qué está escrito en la.bash_profilelata o bien añadir a lo globalPATHdesde/etc/pathso anular por completo.Para el registro,
/etc/pathsparece ser una peculiaridad de MAC OS: al menos no lo he encontrado en GNU / Linux.fuente
/etc/pathsOSX.Así es como su shell encuentra programas. Cuando escribe
ls, por ejemplo, está ejecutando un programa llamadolsque vive en la/binmayoría de los sistemas, incluido Mac OS X. Su shell solo puede encontrar eso porque/binestá en elPATH.El shell busca programas en
PATHorden, de izquierda a derecha. Si hay doslsprogramas en su sistema, y sus directorios están en suPATH, encontrará el que está en el directorio que aparece primero en suPATH.Las rutas configuradas
/etc/pathsse agregan alPATHinicio en todos los shells en Mac OS X.~/.bash_profilees solo uno de varios scripts de shell ejecutados por Bash al inicio, y varios de ellos son específicos de Bash. Por lo tanto, si cambia su shell, Mac OS X también se envíatcshyzsh, por ejemplo, los cambios realizados para/etc/bashrcque no se apliquen a su nuevo shell.Además,
/etc/pathses un archivo de configuración de nivel de sistema, mientras que~/.bash_profilees por usuario. Si tenía múltiples usuarios interactivos configurados en su Mac, no querría agregar directorios a los/etc/pathsque no desea que aparezcan en todosPATH. Lo mismo es cierto/etc/bashrc, excepto que, por supuesto, eso solo se aplica a los usuarios que usan Bash como su shell.Por lo general, solo ve la variable sin el sigilo cuando configura la variable.
FOO=barestablece laFOOvariable de entorno en la cadenabar. Si escribeset, el shell muestra todas las variables de entorno, y en ese caso también verá la variable sin ningún sigilo.$PATHy${PATH}generalmente son intercambiables. Le dicen al shell que expanda elPATHvalor de la variable actual en el lugar. La diferencia tiene que ver con cómo y dónde los usa. Por ejemplo:En el segundo
echocomando, el shell no imprime nada porque le pide que imprima una variable llamadaFOOx, que no existe; el shell trata las variables inexistentes como vacías. Debido a que el terceroechousa la sintaxis de llaves, permite que el shell vea que está solicitando laFOOvariable y quexes solo otro carácter que desea imprimir inmediatamente después.Hay otra forma de obtener el mismo efecto sin llaves, por cierto:
Las variables de entorno se expanden entre comillas dobles, y las comillas separan la
xexpansión de la variable para que el shell haga lo correcto.Estoy usando la
FOOvariable de entorno aquí solo por claridad. Todo lo que he escrito anteriormente también se aplicaPATH, ya que es solo otra variable de entorno. Los textos de ejemplo serían mucho más largos.Tomando el
FOOejemplo anterior , si tuviera que ejecutar otro programa, no vería laFOOvariable porque no se exporta. Vive solo dentro de esa instancia de shell:Cuando ejecuto por primera vez un nuevo
bashshell bajo el que ya estaba usando, luego trato de mostrar el valor deFOO, obtengo un espacio en blanco porqueFOOno se exportó para que lo vean los subprogramas. Luego salí de la segundabashinstancia, la exporté, corríbashnuevamente, y ahora la segunda instancia ve el valor deFOO.Lo usa
exportcuando desea que los subprogramas vean los valores establecidos en el shell, y no lo usa cuando no desea que eso suceda.Normalmente, no exporto variables temporales en scripts de shell, porque no quiero que cambien la forma en que se ejecutan los programas desde ese script de shell.
No voy a responder ninguna de tus otras preguntas. Se supone que solo debes hacer una pregunta a la vez. Solo he respondido esto porque están vagamente relacionados. Todo lo demás pertenece a una pregunta separada.
fuente