-
Mi chiedevo se i seguenti due modi di eseguire uno script bash
sono equivalenti?. ./myScript.sh source myScript.sh
- Entrambi stanno eseguendo il contenuto dello script invece di eseguire lo script, ovvero non stanno creando una subshell per eseguire lo script?
Risposta accettata:
-
Sono equivalenti in bash in quanto fanno esattamente la stessa cosa. D'altra parte,
source
è più lungo di 5 caratteri e non è portabile su shell solo POSIX o Bourne mentre.
(punto) lo è, quindi non mi preoccupo mai di usaresource
. -
È corretto:l'acquisizione di un file esegue i comandi nella shell corrente e influenzerà l'ambiente della shell corrente. Puoi ancora passare argomenti al file sorgente e bash cercherà effettivamente in
$PATH
per il nome del file proprio come un normale comando se non contiene barre.
Non correlato alla domanda originale di .
rispetto a source
, ma nel tuo esempio,
. ./myScript.sh
non è identico a
source myScript.sh
perché mentre .
e source
sono funzionalmente identici, myScript.sh
e ./myScript.sh
non sono la stessa cosa. Da ./myScript.sh
contiene una barra, viene interpretato come un percorso e la shell usa solo ./myScript.sh
. Tuttavia, myScript.sh
non ha una barra quindi la shell esegue un $PATH
cercalo prima. Questo è il comportamento standard specificato da POSIX per .
. La maggior parte delle shell ha questa impostazione predefinita, sebbene possano aggiungere estensioni (come la ricerca nella directory di lavoro corrente dopo la ricerca del percorso) o opzioni per modificare il comportamento di .
/source
.