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 elsourcecomando 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
sourcees un sinónimo / atajo no estándar y no portátil para el comando "punto" ( ) definido por POSIX., y no al revés.sourcey 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 essourcesinó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.shcon 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
shproceso 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
exportes solo si esas variables se van a usar en subcapas. Podría omitirexporten el archivo si las variables solo se usan en el shell actual. ¿Está bien?