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.