Aku bisa melakukan ini:
$ pwd
/home/beau
$ ln -s /home/beau/foo/bar.txt /home/beau/bar.txt
$ readlink -f bar.txt
/home/beau/foo/bar.txt
Tetapi saya ingin dapat melakukan ini:
$ pwd
/home/beau
$ cd foo
$ ln -s bar.txt /home/beau/bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
Apakah ini mungkin? Bisakah saya entah bagaimana menyelesaikan relatif pathname dan meneruskannya ln
?
ln -s $(pwd)/bar.txt ~/
atau sertakan skrip instalasi.ln -s foo/bar.txt /home/beau/bar.txt
Jawaban:
Jika Anda membuat tautan simbolis ke jalur relatif, itu akan menyimpannya sebagai tautan simbolis relatif, tidak absolut seperti contoh Anda. Ini umumnya hal yang baik. Tautan simbolis absolut tidak berfungsi saat sistem file dipasang di tempat lain.
Alasan contoh Anda tidak berfungsi adalah karena relatif terhadap direktori induk dari tautan simbolik dan bukan tempat
ln
dijalankan.Anda dapat melakukan:
Atau untuk itu:
Sangat penting untuk menyadari bahwa argumen pertama setelah
ln -s
disimpan sebagai target symlink. Ini bisa berupa sembarang string (dengan satu-satunya batasan yang tidak boleh kosong dan tidak bisa mengandung karakter NUL), tetapi pada saat symlink sedang digunakan dan diselesaikan, string itu dipahami sebagai jalur relatif ke jalur direktori induk dari symlink (ketika tidak dimulai dengan/
).sumber
~
akan berhasil.Jika Anda menggunakan coreutils yang lebih baru (Saya menggunakan coreutils-8.22-11), ia memiliki opsi untuk melakukan itu:
dapat menyimpan teks sewenang-wenang; jika nanti diselesaikan, tautan relatif adalah -r, --relative buat tautan simbolis relatif ke lokasi tautan
Sebagai contoh:
sumber
-r
. Menggunakan Mac.coreutils
> = 8.16 (sumber: superuser.com/a/837935/403979 )Maaf tidak. Tautan simbolis relatif terhadap lokasi tautan, bukan lokasi Anda saat membuat tautan. Ada beberapa alasan bagus untuk perilaku ini, yang sebagian besar melibatkan pemasangan sistem file jarak jauh.
sumber
Ada utilitas kecil yang nyaman disebut
symlinks
(awalnya oleh Mark Lords, sekarang dikelola oleh J. Brandt Buckley), hadir di banyak distribusi Linux.Untuk mengonversi semua tautan simbolik absolut dalam direktori menjadi relatif:
Sayangnya tidak ada opsi untuk mengonversi satu tautan, Anda harus memindahkannya ke direktori sendiri terlebih dahulu.
sumber
Kamu bisa mencoba:
Tapi, itu membuat tautan simbolis ke pathname absolut. Pertanyaan tekstual Anda menanyakan menyebutkan relatif pathname ...
Biasanya, nama path relatif adalah apa yang Anda inginkan, dan apa yang
ln -s
memberi Anda. Saya pikir yang Anda inginkan adalah:sumber
Saat shell paling umum memperluas path, untuk membuat symlink relatif Anda harus mengutip "path sumber".
Juga,
-s
parameter artinya--symbolic
.ln
membuat tautan keras secara default.sumber
Jika Anda yakin tidak ada kemungkinan poin mount Anda berubah, Anda dapat mencapai apa yang Anda coba lakukan dalam bash shell seperti ini:
Ini mengasumsikan bahwa Anda berada di direktori target ketika membuat tautan simbolik.
sumber