Vedi: BASH FAQ entry # 28: "Come determino la posizione del mio script? Voglio leggere alcuni file di configurazione dalla stessa posizione."
Qualsiasi soluzione non funzionerà il 100% delle volte:
È importante rendersi conto che nel caso generale questo problema non ha soluzione. Qualsiasi approccio di cui potresti aver sentito parlare e qualsiasi approccio che verrà descritto in dettaglio di seguito, presenta difetti e funzionerà solo in casi specifici. Innanzitutto, cerca di evitare completamente il problema non dipendendo dalla posizione del tuo script!
Se hai bisogno di scrivere uno strumento molto riutilizzabile, prendere il percorso corretto come parametro dello script sarà il metodo più affidabile .
Supponendo che il tuo script verrà eseguito solo da alcune shell e solo con un po 'di flessibilità richiesta, puoi probabilmente rilassare un po' di questa paranoia. È ancora utile esaminare le tue opzioni. Ci sono modelli comuni che le persone usano che sono particolarmente problematici.
In particolare, la FAQ consiglia di evitare la $0variabile molto comunemente usata :
Niente di ciò che legge $0sarà mai a prova di proiettile, perché di per $0sé è inaffidabile.
In alternativa, potresti usare $BASH_SOURCEinvece. Qualcosa come questo:
source "${BASH_SOURCE%/*}/act.conf.sh"
Ci sono anche alcuni avvertimenti su questa soluzione. Consulta la pagina delle domande frequenti per vedere i compromessi tra le diverse soluzioni. Sembrano consigliare cdin combinazione con $BASH_SOURCEnei casi in cui funzionerà per te, poiché ottieni una pratica condizione di errore quando non si espande correttamente.
readlink. Non sono stato in grado di determinare le parole chiave da cercare, quindi ho postato la domanda qui ....