2009-12-10 11 views

risposta

17

Come dice klausbyskov, il primo modulo richiede che il file abbia il suo bit di autorizzazione eseguibile impostato.

Ma, ancora più importante, il primo modulo esegue lo script in un processo separato (distinto da, indipendente e non in grado di apportare modifiche nella shell che lo ha avviato). La seconda forma fa sì che la shell iniziale esegua direttamente i comandi dal file (come se li avessi inseriti nella shell, o come se fossero inclusi nello script che esegue il "sourcing").

Uno script che contiene FOO=bar; export FOO non avrà creato una variabile di ambiente FOO esportata nella shell che esegue la prima variante, ma creerà tale variabile in una shell che esegue la seconda variante.

La seconda forma (‘approvvigionamento’) è un po 'come un #include in C.

4

Il primo richiede che il file abbia il flag + x impostato. Il secondo usa il. comando aka "source", descritto here.

+3

Anche se questo è vero, la distinzione più importante è che la "fonte" legge ed esegue il file nell'istanza shell corrente. L'esecuzione dello script avvia una nuova istanza della shell (come specificato nella riga shebang) in cui viene eseguito lo script. –

+0

@Dan, sì è giusto, ed è anche spiegato nel link che ho postato. –

+2

Questo è il flag '-x' * permesso *, non l'opzione bash -x * * solo per essere chiari. –

Problemi correlati