2012-05-30 20 views
65

C'è un modo per includere un altro script di shell in uno script di shell per poter accedere alle sue funzioni?Come includere il file in uno script di shell bash

Come in PHP è possibile utilizzare la direttiva include con altri file PHP per eseguire le funzioni contenute all'interno semplicemente chiamando il nome della funzione.

+0

possibile duplicato di [Bash:? Come _best_ per includere altri script] (http://stackoverflow.com/questions/192292/bash-how-best-to-include-other -scripts) – Troubadour

+0

@Troubadour, grazie per il riferimento. Anche se il post si riferisce al comando 'source', la domanda in sé sta chiedendo come individuare la posizione di un file' source'. – Mechaflash

+0

Sì, ma è più che sufficiente per le tue esigenze. Se avessi cercato "bash" e "include" (due parole che sono nel titolo della tua domanda), avresti visto questo in cima ai risultati e non avresti dovuto fare una domanda così fondamentale. – Troubadour

risposta

128

In poche parole all'interno del vostro script:

source FILE 

O

. FILE 

è la stessa 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

Si noti che. è conforme a POSIX mentre la fonte non è –

+0

Ma qui la fonte non è esattamente la stessa cosa che facciamo nella lingua 'C'. Qui la fonte sta eseguendo lo script figlio nello script principale. Cosa succede se voglio solo chiamare una funzione particolare dallo script figlio? –

+6

Non confondere '. script.sh' con './script.sh'.Ho perso ore cercando di capire cosa sta succedendo –

25

Sì, utilizzare source o breve modulo che si trova proprio .:

. other_script.sh 
+0

Nota la versione '.' funziona su' sh' e su Bash. La "fonte" funziona solo in Bash. –

11

Sopra risposte è corretta, ma se eseguire lo script in un'altra cartella, ci sarà qualche problema.

Ad esempio, il a.sh e b.sh sono nella stessa cartella, un comprendono b con . ./b.sh includere.

Quando si esegue lo script fuori dalla cartella, ad esempio con xx/xx/xx/a.sh, il file b.sh non viene trovato: ./b.sh: No such file or directory.

Io uso

. $(dirname "$0")/b.sh 
Problemi correlati