Come eseguire uno script da un altro percorso e conoscere il percorso dello script?


8

Devo eseguire uno script che acceda a un file nello stesso percorso in cui si trova.

Ad esempio: ho lo script /home/me/folder/script.she questo script accederà al file /home/me/folder/myfile. Dato che il file si trova nello stesso percorso dello script, utilizzo semplicemente il nome myfile, non il percorso completo.

Ma se lo eseguo /tmp/, come:

/tmp$ /home/me/folder/script.sh

mi dà:

myfile: No such file or directory

Quindi, come posso dire nello script che il file si trova nello stesso percorso dello script stesso?


Puoi mostrare qual è l'uso di myfile qui?
Faheem Mitha,

@Faheem Mitha: è solo un altro script che il mio script.sh chiama.
Tom Brito,

Qualche motivo per cui non vuoi utilizzare l'intero percorso o spostarli entrambi nel PERCORSO?
Faheem Mitha,

1
@Faheem Mitha: voglio essere in grado di spostare questa cartella con gli script in un altro posto, forse anche un altro computer, senza bisogno di riscrivere il percorso di myfile.
Tom Brito,

Risposte:



9

Non puoi sapere in tutte le circostanze, ma spesso (non sempre) quando esegui uno script per percorso invece di lasciare che la shell esegua la ricerca $PATH, il percorso dello script sarà inserito $0. È quindi possibile utilizzare dirname "$0"o ${0%/*}per ottenere il percorso.


4

Normalmente farei qualcosa del genere alla testa della mia sceneggiatura:

SCRIPTDIR=$(dirname "$0")

Oppure, per ottenere il percorso completo nella directory dello script (anziché un percorso relativo):

SCRIPTDIR=$(cd $(dirname "$0") && pwd)

Quindi fai riferimento ${SCRIPTDIR}dove necessario.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.