¿Cuál es el propósito de PATH?
Así es como su shell encuentra programas. Cuando escribe ls, por ejemplo, está ejecutando un programa llamado lsque vive en la /binmayoría de los sistemas, incluido Mac OS X. Su shell solo puede encontrar eso porque /binestá en el PATH.
El shell busca programas en PATHorden, de izquierda a derecha. Si hay dos lsprogramas en su sistema, y sus directorios están en su PATH, encontrará el que está en el directorio que aparece primero en su PATH.
¿Cuál es la diferencia entre / etc / paths y ~ / .bash_profile
Las rutas configuradas /etc/pathsse agregan al PATHinicio 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ía tcshy zsh, 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 todos PATH. Lo mismo es cierto /etc/bashrc, excepto que, por supuesto, eso 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 la variable sin el sigilo cuando configura la variable. FOO=barestablece la FOOvariable de entorno en la cadena bar. Si escribe set, 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 el PATHvalor de la variable actual 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 echocomando, el shell no imprime nada porque le pide que imprima una variable llamada FOOx, que no existe; el shell trata las variables inexistentes como vacías. Debido a que el tercero echousa la sintaxis de llaves, permite que el shell vea que está solicitando la FOOvariable y que xes solo otro carácter que desea imprimir inmediatamente después.
Hay otra forma de obtener el mismo efecto sin llaves, por cierto:
$ echo "$FOO"x
barx
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 aplica PATH, ya que es solo otra variable de entorno. Los textos de ejemplo serían mucho más largos.
¿Qué significa export PATH? ¿Cuándo exportamos?
Tomando el FOOejemplo anterior , si tuviera que ejecutar otro programa, no vería la FOOvariable 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 bashshell bajo el que ya estaba usando, luego trato de mostrar el valor de FOO, obtengo un espacio en blanco porque FOOno se exportó para que lo vean los subprogramas. Luego salí de la segunda bashinstancia, la exporté, corrí bashnuevamente, y ahora la segunda instancia ve el valor de FOO.
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.