Cuando uso bash shell, a veces mantengo las variables de entorno en un archivo de texto del que copio / pego el contenido, por ejemplo, exportaciones.txt:
export FOO=bar
export FIZZ=buzz
Alguien me mostró en lugar de copiar / pegar, podría escribir en la terminal
. exports.txt
que tendría el mismo efecto que copiar / pegar.
¿Cuál es el mecanismo por el cual funciona este comando 'dot space filename'? Es difícil pensar en términos de búsqueda para ello.
Quiero entender lo que está sucediendo y los detalles más generales de lo que está haciendo esta frase.
help .
Esto es tan corto que el motor de Stack Exchange cree que es demasiado corto para ser un comentario.'. ' args
, con comillas simples o dobles. De lo contrario, bash se come el espacio sin comillas cuando analiza la línea en fichas (consulte "división de palabras" en el manual de bash)..
essource
, que literalmente significa "comandos de origen de este archivo", al menos para mí.Respuestas:
El
.
comando ("punto") es un sinónimo / acceso directo para elsource
comando incorporado del shell .Hace que el script de shell con nombre se lea y se ejecute dentro del contexto de shell actual (en lugar de un subshell). Esto permite que el script de origen modifique el entorno del shell de llamada, como establecer variables y definir funciones y alias de shell.
fuente
source
es un sinónimo / atajo no estándar y no portátil para el comando "punto" ( ) definido por POSIX.
, y no al revés.source
y no estándar.
en modo no POSIX, los cuales buscan en el directorio actual incluso si no forma parte de él$PATH
. En modo POSIX, proporciona un estándar.
que no busca en el directorio actual, y nosource
. En ninguno de los modos essource
sinónimo del.
comando POSIX .Si bien las dos respuestas existentes ya son excelentes, siento que falta el ejemplo en el que el efecto es más "notable".
Digamos que tengo un archivo
script.sh
con los siguientes contenidos:Si ejecutara este script normalmente (
sh script.sh
), vería esto:Pero si supiera dónde encontrar el script (
. script.sh
), terminaría con esto:¡Observe cómo en el segundo caso ha cambiado el directorio de trabajo de nuestro shell principal!
Esto se debe a que (como en punta a cabo en las otras respuestas) El primer ejemplo se ejecuta en su propio subnivel (el
sh
proceso partimos de lash
-command, esto podría haber sido, básicamente, cualquier cáscara,bash
,dash
, lo que sea), cambia el directorio existe, no hace nada y cierra. Mientras que el segundo ejemplo se ejecuta en nuestro shell principal, ¡cambia el directorio allí!fuente
Aquí hay un ejemplo.
Archivo de script: mytest.sh
si intenta imprimir alguna de las variables anteriores, no obtendrá nada
pero si lo haces
o
y entonces
imprimirá 1
Solo una respuesta visual de lo que escribió Spiff
fuente
export
es solo si esas variables se van a usar en subcapas. Podría omitirexport
en el archivo si las variables solo se usan en el shell actual. ¿Está bien?