Coba satu kalimat sederhana berikut:
Untuk semua UNIX / OSX / Linux
dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
Pesta
dir=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
Catatan: Tanda hubung ganda (-) digunakan dalam perintah untuk menandakan akhir dari opsi perintah, sehingga file yang berisi tanda hubung atau karakter khusus lainnya tidak akan melanggar perintah.
Catatan: Di Bash, gunakan yang ${BASH_SOURCE[0]}
mendukung $0
, jika tidak jalur tersebut dapat rusak saat mengambilnya ( source
/ .
).
Untuk Linux, Mac dan * BSD lainnya:
cd "$(dirname "$(realpath "$0")")";
Catatan: realpath
harus diinstal di distribusi Linux paling populer secara default (seperti Ubuntu), tetapi dalam beberapa itu bisa hilang, jadi Anda harus menginstalnya.
Catatan: Jika Anda menggunakan Bash, gunakan yang ${BASH_SOURCE[0]}
mendukung $0
, jika tidak, jalur tersebut dapat rusak saat mengambilnya ( source
/ .
).
Kalau tidak, Anda bisa mencoba sesuatu seperti itu (itu akan menggunakan alat pertama yang ada):
cd "$(dirname "$(readlink -f "$0" || realpath "$0")")"
Khusus untuk Linux:
cd "$(dirname "$(readlink -f "$0")")"
Menggunakan tautan baca GNU pada * BSD / Mac:
cd "$(dirname "$(greadlink -f "$0")")"
Catatan: Anda harus coreutils
menginstal (mis. 1. Instal Homebrew , 2. brew install coreutils
).
Di bash
Dalam bash, Anda dapat menggunakan Parameter Expansions untuk mencapai itu, seperti:
cd "${0%/*}"
tetapi tidak berfungsi jika skrip dijalankan dari direktori yang sama.
Atau Anda dapat mendefinisikan fungsi berikut di bash:
realpath () {
[[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}
Fungsi ini membutuhkan 1 argumen. Jika argumen sudah memiliki path absolut, cetaklah sebagaimana adanya, jika tidak, cetak $PWD
argumen variabel + nama file (tanpa ./
awalan).
atau di sini adalah versi yang diambil dari .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"
}
Terkait:
Lihat juga:
Bagaimana saya bisa mendapatkan perilaku readlink -f GNU di Mac?