Ho un file di script bash, che viene inserito in una directory aggiunta a $PATH in modo da poter chiamare lo script da qualsiasi directory.
C'è un altro file di testo nella stessa directory dello script. Mi chiedo come fare riferimento al file di testo nello script?
Ad esempio, se lo script è solo per generare il contenuto del file di testo, cat textfile
non funzionerà, poiché quando si chiama lo script da una directory diversa, il file di testo non viene trovato.
Risposta accettata:
Questi dovrebbero funzionare allo stesso modo, purché non ci siano collegamenti simbolici (nell'espansione del percorso o nello script stesso):
-
MYDIR="$(dirname "$(realpath "$0")")"
-
MYDIR="$(dirname "$(which "$0")")"
-
Una versione in due passaggi di uno qualsiasi dei precedenti:
MYSELF="$(realpath "$0")"
MYDIR="${MYSELF%/*}"
Se c'è un collegamento simbolico sulla strada per il tuo script, allora which
fornirà una risposta che non include la risoluzione di quel collegamento. Se realpath
non è installato di default sul tuo sistema, puoi trovarlo qui.
[MODIFICA]: Come sembra che realpath
non ha alcun vantaggio su readlink -f
suggerito da Caleb, è probabilmente meglio usare quest'ultimo. I miei test di cronometraggio indicano che in realtà è più veloce.