-
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
$PATHper 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 .