GNU/Linux >> Linux Esercitazione >  >> Linux

Fare riferimento a un file nella stessa directory di uno script trovato in $path?

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.


Linux
  1. Come trovare il file più vecchio in un albero di directory in Linux

  2. Eseguire lo stesso script su più server tramite Ssh?

  3. Reindirizzamento allo stesso file del file di origine elaborato dal comando?

  4. Salva tutto l'output del terminale in un file?

  5. Comprendere la directory /etc/sysconfig

Come faccio a conoscere il nome del file di script in uno script Bash?

Core scaricato, ma il file core non si trova nella directory corrente?

Come reindirizzare stderr e stdout a file diversi nella stessa riga nello script?

'SDL.h file o directory non trovati' durante la compilazione

Come ottengo la directory assoluta di un file in bash?

Perché la directory principale è indicata da un segno /?