¿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 ls
que vive en la /bin
mayoría de los sistemas, incluido Mac OS X. Su shell solo puede encontrar eso porque /bin
está en el PATH
.
El shell busca programas en PATH
orden, de izquierda a derecha. Si hay dos ls
programas 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/paths
se agregan al PATH
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 ellos son específicos de Bash. Por lo tanto, si cambia su shell, Mac OS X también se envía tcsh
y zsh
, por ejemplo, los cambios realizados para /etc/bashrc
que no se apliquen a su nuevo shell.
Además, /etc/paths
es un archivo de configuración de nivel de sistema, mientras que ~/.bash_profile
es por usuario. Si tenía múltiples usuarios interactivos configurados en su Mac, no querría agregar directorios a los /etc/paths
que 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=bar
establece la FOO
variable 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.
$PATH
y ${PATH}
generalmente son intercambiables. Le dicen al shell que expanda el PATH
valor 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 echo
comando, 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 echo
usa la sintaxis de llaves, permite que el shell vea que está solicitando la FOO
variable y que x
es 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 x
expansión de la variable para que el shell haga lo correcto.
Estoy usando la FOO
variable 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 FOO
ejemplo anterior , si tuviera que ejecutar otro programa, no vería la FOO
variable 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 bajo el que ya estaba usando, luego trato de mostrar el valor de FOO
, obtengo un espacio en blanco porque FOO
no se exportó para que lo vean los subprogramas. Luego salí de la segunda bash
instancia, la exporté, corrí bash
nuevamente, y ahora la segunda instancia ve el valor de FOO
.
Lo usa export
cuando 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.