Ho uno script di shell in /usr/bin
. Chiamiamolo hello
.
Contiene questo:
echo "I am located in $PWD"
echo "I am called from this directory: ???"
Esecuzione di hello
da /home/Documents
Mi aspetto il seguente output:
I am located in /usr/bin
I am called from this directory: /home/Documents
Come posso ottenere il percorso della directory da cui viene eseguito lo script?
Risposta accettata:
Non posso commentare un'altra risposta, quindi scrivo qui. Come detto, dirname
legge solo $0
e prende il nome della directory, quindi se hai chiamato qualcosa come ../../directory/something.sh
non risolve quei punti ma restituisce solo ../../directory
. Invece di usare l'espansione della subshell con cd
e pwd
, puoi usare un comando molto intelligente readlink
che in realtà risolve non solo le directory tratteggiate ma anche tutti i collegamenti simbolici. Suggerisco quindi
echo "I am located at $(readlink -e -- "$0")"
Puoi usare un altro dirname
intorno a questo per ottenere la directory invece del file.