2012-02-17 19 views
58

que he visto shell scripts que incluyen una línea como:¿Qué ocurre cuando un archivo es `fuente`-d en contexto Unix/Linux?

source someOtherFile 

Sé que hace que el contenido de someOtherFile de ejecutar, pero ¿cuál es el significado de source?


Preguntas de seguimiento: ¿Puede CUALQUIER secuencia de comandos ser fuente, o solamente cierto tipo de secuencias de comandos? ¿Hay algún efecto secundario aparte de las variables de entorno cuando se genera un script (a diferencia de lo que normalmente se ejecuta)?

+2

cross site duplicate: http://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-scrip/176788#176788 – lesmana

Respuesta

67

Al ejecutar el comando source en un script, se ejecuta el script en el contexto del proceso actual. Esto significa que las variables de entorno establecidas por el script permanecen disponibles después de que se termina de ejecutar. Esto está en contraste con ejecutar un script normalmente, en cuyo caso las variables de entorno establecidas dentro del proceso recién generado se perderán una vez que el script salga.

Puede originar cualquier script de shell ejecutable. El efecto final será el mismo que si hubiera escrito los comandos en el script en su terminal. Por ejemplo, si el script cambia directorios, cuando termine de ejecutarse, su directorio de trabajo actual habrá cambiado.

+2

¿Puede CUALQUIER script obtenerse, o solo cierto tipo de scripts? Cualquier efecto secundario distinto de las variables de entorno cuando se genera un script (en lugar de ejecutarlo normalmente)? Además, su respuesta es sucinta y comprensible. ¡Gracias! –

+4

Puede fuente cualquier script de shell. Los efectos secundarios se crean por el hecho de que el script se ejecuta literalmente en su proceso. Entonces, si cambia de directorio, verá su cambio de pwd. Mientras que simplemente ejecutar un script de shell normalmente no cambiará tu pwd. – Interrobang

+0

¿Qué tal si tengo un script de ejecución larga dentro del archivo en la fuente? va a terminar? o hay un tiempo de espera predeterminado de esto? –

16

Si le dice al caparazón, p. bash, para leer un archivo y ejecutar los comandos en el archivo, se llama abastecimiento. El punto principal es que el proceso actual (shell) hace esto, no un nuevo proceso hijo.

En BASH puede usar el comando source o simplemente . para obtener un archivo.

2

source es un comando de Unix que evalúa el archivo que sigue al comando, como una lista de comandos, ejecutados en el contexto actual. También puede usar . para obtener el archivo.

source my-script.sh; 
. my-script.sh; 

Ambos comandos tendrán el mismo efecto.

Por el contrario, pasar el nombre de archivo del script al shell deseado ejecutará el script en una subshell, no en el contexto actual.

Cuestiones relacionadas