Saya ingin mengambil nama file absolut dari file skrip yang saat ini dieksekusi. Tautan juga harus dipecahkan.
Di Linux, ini sepertinya dilakukan seperti ini:
$(readlink -mn "$0")
tetapi readlink
tampaknya bekerja sangat berbeda pada Mac OS X.
Saya sudah membaca bahwa ini dilakukan dengan menggunakan
$(realpath $0)
di BSD tapi itu tidak berhasil, baik. Mac OS X tidak punya realpath
.
Ada ide?
Jawaban:
Saya curang dan menggunakan perl untuk hal ini:
Anda akan berpikir saya hanya akan menulis seluruh skrip dalam perl, dan sering saya lakukan, tetapi tidak selalu.
sumber
sumber
unset -v CDPATH
sebelum cd karena cd dapat menyebabkan output yang tidak diinginkan jika CDPATH diatur.scriptDir=$(unset -v CDPATH; cd "$(dirname "$(readlink "$BASH_SOURCE" || echo "$BASH_SOURCE)")" && pwd -P)
Ini menangani kombo symlink, dan ini berfungsi pada file dan folder:
Tetapi itu tidak mendukung realpath - relatif-untuk. Ini membutuhkan konversi yang dijelaskan di sini .
sumber
Pendekatan lain:
sumber