Coba:
ABSOLUTE_PATH=$(cd /home/nohsib/dvc/../bop; pwd)
Yang Anda cari adalah readlink
:
absolute_path=$(readlink -m /home/nohsib/dvc/../bop)
Perhatikan: Anda perlu menggunakan readlink
GNU implementasi yang menawarkan opsi "-m". readlink
BSD misalnya tidak.
Jika Anda ingin melakukannya tanpa mengikuti symlink apa pun, coba gunakan realpath
dengan opsi -s
:
$ realpath -s /home/nohsib/dvc/../bop
/home/nohsib/bop
Perhatikan bahwa dengan realpath
, biasanya semua kecuali komponen terakhir harus ada. Jadi agar hal di atas berfungsi, berikut ini semua harus ada di sistem file:
/home
/home/nohsib
/home/nohsib/dvc
Namun Anda dapat mengabaikan persyaratan tersebut menggunakan -m
opsi.
$ realpath -sm /home/nohsib/dvc/../bop
/home/nohsib/bop
(Catatan realpath
tidak tersedia di semua sistem, terutama sistem non-Debian lama. Bagi mereka yang bekerja pada Linux tersemat, sayangnya Busybox realpath
tidak mendukung -s
atau -m
sakelar.)
Satu masalah dengan menggunakan :
ABSOLUTE_PATH=$(cd ${possibleDirectory}; pwd)
adalah jika ${possibleDirectory} tidak ada, ABSOLUTE_PATH kemudian akan disetel ke direktori saat ini. Yang mungkin BUKAN yang Anda inginkan atau harapkan.
Saya pikir menggunakan versi ini mungkin lebih diinginkan secara umum:
ABSOLUTE_PATH=$(cd ${possibleDirectory} && pwd)
Jika ${possibleDirectory} tidak ada atau tidak dapat diakses, karena izin akses direktori tidak ada, ABSOLUTE_PATH akan berisi string kosong.
Keuntungan dari ini adalah Anda kemudian dapat menguji string kosong atau membiarkannya gagal secara alami, tergantung pada keadaan. Default ke direktori saat ini dalam kasus perintah 'cd' yang gagal dapat menyebabkan hasil yang sangat tidak terduga dan mungkin bencana (mis. rm -rf "$ABSOLUTE_PATH" )