2012-05-30 13 views
65

¿Hay alguna manera de incluir otro script de shell en un script de shell para poder acceder a sus funciones?Cómo incluir archivos en un script de shell bash

Al igual que en PHP puede usar la directiva include con otros archivos PHP para ejecutar las funciones que se encuentran dentro simplemente llamando al nombre de la función.

+0

posible duplicado de [Bash:? Cómo _best_ para incluir otras secuencias de comandos] (http://stackoverflow.com/questions/192292/bash-how-best-to-include-other -scripts) – Troubadour

+0

@Troubadour gracias por la referencia. Aunque la publicación se refiere al comando 'source', la pregunta en sí misma es preguntar cómo ubicar la ubicación de un archivo' source'. – Mechaflash

+0

Sí, pero es más que suficiente para sus necesidades. Si hubiera buscado "bash" e "incluir" (dos palabras que están en el título de su propia pregunta), entonces habría visto esto cerca de la parte superior de los resultados y no era necesario formular una pregunta tan básica. – Troubadour

Respuesta

128

En pocas palabras dentro del guión:

source FILE 

O

. FILE 

que es la misma cosa.

$ LANG=C help source 
source: source filename [arguments] 
Execute commands from a file in the current shell. 

Read and execute commands from FILENAME in the current shell. The 
entries in $PATH are used to find the directory containing FILENAME. 
If any ARGUMENTS are supplied, they become the positional parameters 
when FILENAME is executed. 

Exit Status: 
Returns the status of the last command executed in FILENAME; fails if 
FILENAME cannot be read. 
+12

Tenga en cuenta que. es compatible con POSIX, mientras que la fuente no es –

+0

, pero aquí la fuente no es exactamente la misma que en el lenguaje 'C'. Aquí la fuente está ejecutando el script secundario en el script principal. ¿Qué sucede si solo quiero llamar a una función particular del script secundario? –

+6

No confundas '. script.sh' con './script.sh'.Perdí horas tratando de descubrir qué está pasando –

25

Sí, utilice source o la forma corta que es sólo .:

. other_script.sh 
+0

Tenga en cuenta que la versión '.' funciona tanto en' sh' como en Bash. La "fuente" solo funciona en Bash. –

11

Por encima de las respuestas es correcta, pero si se ejecuta la escritura en otra carpeta, habrá algún problema.

Por ejemplo, el a.sh y b.sh está en la misma carpeta, A incluyen b con . ./b.sh incluir.

Cuando se ejecuta un script fuera de la carpeta, por ejemplo con xx/xx/xx/a.sh, no se encuentra el archivo : ./b.sh: No such file or directory.

utilizo

. $(dirname "$0")/b.sh 
Cuestiones relacionadas