-
Me preguntaba si las siguientes dos formas de ejecutar un script bash
son equivalentes.. ./myScript.sh source myScript.sh
- ¿Ambos ejecutan el contenido de la secuencia de comandos en lugar de ejecutar la secuencia de comandos, es decir, no crean una subcapa para ejecutar la secuencia de comandos?
Respuesta aceptada:
-
Son equivalentes en bash en que 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.
(punto) es, así que nunca me molesto en usarsource
. -
Eso es correcto:obtener un archivo ejecuta los comandos en el shell actual y afectará su entorno de shell actual. Todavía puede pasar argumentos al archivo fuente y bash realmente buscará en
$PATH
para el nombre del archivo como un comando normal si no contiene barras.
No relacionado con la pregunta original de .
vs source
, pero en tu ejemplo,
. ./myScript.sh
no es idéntico a
source myScript.sh
porque mientras .
y source
son funcionalmente idénticos, myScript.sh
y ./myScript.sh
no son lo mismo. Desde ./myScript.sh
contiene una barra inclinada, se interpreta como una ruta y el shell solo usa ./myScript.sh
. Sin embargo, myScript.sh
no tiene una barra, por lo que el shell hace un $PATH
buscarlo primero. Este es el comportamiento estándar especificado por POSIX para .
. La mayoría de los shells tienen esto predeterminado, 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
.