GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengonversi .. dalam nama jalur menjadi nama absolut dalam skrip bash?

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" )


Linux
  1. Bagaimana cara menyorot skrip Bash di Vim?

  2. Bagaimana cara meneruskan parameter ke skrip Bash?

  3. Cara mengganti spasi pada nama file menggunakan skrip bash

  1. Dalam skrip Python, bagaimana cara mengatur PYTHONPATH?

  2. Bagaimana cara mendapatkan path lengkap dari suatu file?

  3. Cara memasukkan file dalam skrip bash shell

  1. Bagaimana Memanggil Fungsi Bash Dalam Skrip Bash Di Dalam Awk?

  2. Cara Memisahkan String dalam Skrip Bash

  3. Bash Script - Cara Membaca Input Pengguna