Prova le seguenti linee semplici:
Per tutti UNIX / OSX / Linux
dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
bash
dir=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
Nota: un doppio trattino (-) viene utilizzato nei comandi per indicare la fine delle opzioni di comando, quindi i file contenenti trattini o altri caratteri speciali non interromperanno il comando.
Nota: in Bash, utilizzare ${BASH_SOURCE[0]}
a favore di $0
, altrimenti il percorso può interrompersi quando lo si approva ( source
/ .
).
Per Linux, Mac e altri * BSD:
cd "$(dirname "$(realpath "$0")")";
Nota: realpath
dovrebbe essere installato nella distribuzione Linux più popolare per impostazione predefinita (come Ubuntu), ma in alcuni può mancare, quindi è necessario installarlo.
Nota: se si utilizza Bash, utilizzare ${BASH_SOURCE[0]}
a favore di $0
, altrimenti il percorso potrebbe interrompersi quando viene utilizzato ( source
/ .
).
Altrimenti potresti provare qualcosa del genere (utilizzerà il primo strumento esistente):
cd "$(dirname "$(readlink -f "$0" || realpath "$0")")"
Per Linux specifico:
cd "$(dirname "$(readlink -f "$0")")"
Utilizzando GNU readlink su * BSD / Mac:
cd "$(dirname "$(greadlink -f "$0")")"
Nota: è necessario aver coreutils
installato (ad es. 1. Installa Homebrew , 2. brew install coreutils
).
In bash
In bash puoi usare Parameter Expansions per raggiungere questo obiettivo, come:
cd "${0%/*}"
ma non funziona se lo script viene eseguito dalla stessa directory.
In alternativa puoi definire la seguente funzione in bash:
realpath () {
[[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}
Questa funzione accetta 1 argomento. Se l'argomento ha già un percorso assoluto, stampalo così com'è, altrimenti stampa l' $PWD
argomento variabile + nomefile (senza ./
prefisso).
o qui è la versione presa dal .bashrc
file Debian :
function realpath()
{
f=$@
if [ -d "$f" ]; then
base=""
dir="$f"
else
base="/$(basename "$f")"
dir=$(dirname "$f")
fi
dir=$(cd "$dir" && /bin/pwd)
echo "$dir$base"
}
Relazionato:
Guarda anche:
Come posso ottenere il comportamento del readlink di GNU -f su un Mac?