Saya memiliki utilitas yang terdiri dari beberapa direktori dengan beberapa skrip bash dan file pendukung yang akan digunakan untuk beberapa mesin di direktori yang berbeda di setiap mesin. Script harus dapat mereferensikan path relatif ke diri mereka sendiri jadi saya harus bisa mendapatkan path ke file yang saat ini sedang dieksekusi.
Saya menyadari dirname $0
idiom yang bekerja dengan sempurna ketika skrip saya dipanggil langsung. Sayangnya ada keinginan untuk dapat membuat symlink ke skrip ini dari direktori yang sama sekali berbeda dan masih memiliki pekerjaan logika pathing relatif.
Contoh dari keseluruhan struktur driectory adalah sebagai berikut:
/
|-usr/local/lib
| |-foo
| | |-bin
| | | |-script.sh
| | |-res
| | | |-resource_file.txt
|-home/mike/bin
| |-link_to_script (symlink to /usr/local/lib/foo/bin/script.sh)
Bagaimana saya dapat diandalkan referensi /usr/local/lib/foo/res/resource_file.txt
dari script.sh
apakah itu dipanggil oleh /usr/local/lib/foo/bin/script.sh
atau ~mike/bin/link_to_script
?
sumber
source
d (mis.$ source ./sript.sh
) Ini berfungsi untuk kedua kasus:DIR="$(cd "$(dirname "$BASH_SOURCE")" && pwd)"
satu baris:
sumber
readlink -f
tidak bekerja untuk saya, saya memiliki kesalahan ini:Tapi ini bekerja dengan baik:
sumber
Satu tambahan kecil untuk skrip di atas. Opsi -P untuk pwd mengikuti symlink
sumber