Me preguntaba si las siguientes dos formas de ejecutar un script bash son equivalentes.
. ./myScript.sh source myScript.sh
- ¿Ambos ejecutan el contenido del script en lugar de ejecutar el script, es decir, no crean una subshell para ejecutar el script?
bash
shell
shell-script
Tim
fuente
fuente
man .
,man source
o lo que sea que aún no sepa.type .
andhelp .
man $SHELL
,/source
Respuestas:
Son equivalentes en bash porque hacen exactamente lo mismo. Por otro lado,
source
tiene 5 caracteres más y no es portátil para shells solo POSIX o Bourne, mientras que.
(dot) lo es, así que nunca me molesto en usarlosource
.Eso es correcto: el abastecimiento de un archivo ejecuta los comandos en el shell actual y afectará su entorno de shell actual. Todavía puede pasar argumentos al archivo de origen y bash realmente buscará
$PATH
el nombre del archivo como un comando normal si no contiene barras.No relacionado con la pregunta original de
.
vssource
, pero en su ejemplo,no es idéntico a
porque while
.
ysource
son funcionalmente idénticos,myScript.sh
y./myScript.sh
no son lo mismo. Como./myScript.sh
contiene una barra oblicua, se interpreta como una ruta y el shell simplemente la usa./myScript.sh
. Sin embargo,myScript.sh
no tiene una barra oblicua, por lo que el shell$PATH
primero lo busca. Este es el comportamiento estándar especificado por POSIX para.
. La mayoría de los shells se configuran de manera predeterminada, aunque pueden agregar extensiones (como buscar en el directorio de trabajo actual después de la búsqueda de ruta) u opciones para cambiar el comportamiento de.
/source
.fuente
/
depende del shellbash
yzsh
depende de si el modo POSIX está habilitado o no. También tenga en cuenta que en muchas implementaciones de ksh, se.
comporta de manera diferente asource
.Si, son equivalentes. No hay diferencia funcional;
.
es solo un sinónimo incorporado parasource
.(Edit: Al parecer, esto sólo es cierto para
bash
yzsh
algunos proyectiles más ligeros no tienen.source
, Solamente.
está especificada por POSIX modoksh
,dash
,ash
, etc pueden no tenersource
Ver. La respuesta de jw013 para obtener información.)fuente
$ alias .
salidasbash: alias: .: not found
.