Buat tautan simbolis absolut ke direktori saat ini

12

Saya sekarang berada di bawah direktori dengan jalan yang sangat panjang. Untuk mengunjunginya lebih cepat di masa depan, saya ingin membuat tautan ke sana.

Saya mencoba

ln -s . ~/mylink

~/mylinksebenarnya tautan ke ~. Jadi bisakah saya memperluas ~ke pathname yang usang, dan kemudian memberikannya ln?

Tim
sumber

Jawaban:

19

Sebuah symlink sebenarnya menyimpan path yang Anda berikan secara literal, sebagai string¹. Itu berarti tautan Anda ~/mylinkmengandung " ." (satu karakter). Saat Anda mengakses tautan, jalur itu ditafsirkan relatif terhadap di mana tautan itu berada, dan bukan di mana Anda berada saat Anda membuat tautan itu.

Sebagai gantinya, Anda dapat menyimpan jalur aktual yang Anda inginkan di tautan:

ln -s "$(pwd)" ~/mylink

menggunakan substitusi perintah untuk memasukkan output pwd(nama direktori kerja) ke dalam baris perintah Anda. lnmelihat path lengkap dan menyimpannya ke symlink Anda, yang kemudian akan menunjuk ke tempat yang tepat.

¹ Lebih atau kurang.

Michael Homer
sumber
2
Lihat juga "$PWD"di kerang POSIX dan ~0di zsh.
Stéphane Chazelas
7

Kamu harus menggunakan:

ln -s "$(cd . && pwd)" ~/mylink

atau:

ln -s "$(pwd -P)" ~/mylink

untuk mendapatkan hasil yang tepat untuk direktori kerja saat ini. Itu dapat diubah saat Anda bekerja di dalamnya seperti dalam pertanyaan ini .

cuonglm
sumber
1
Yang pertama belum tentu membantu dalam semua shell (lihat jawaban ini ). OP kemungkinan ingin menggunakan $PWD(jalur yang digunakannya untuk sampai ke sana), bukan $(pwd -P)(jalur kanonik ke direktori saat ini). Jika $PWDtidak lagi menunjuk ke direktori saat ini, maka tidak ada yang $(pwd -P)akan mengatakan pada menit berikutnya juga.
Stéphane Chazelas
@ StéphaneChazelas: Lihat ini unix.stackexchange.com/questions/147693/…
cuonglm
@ StéphaneChazelas: Anda dapat melihat "$PWD"masih memiliki nilai lama jika direktori saat ini dipindahkan. PWDhanya diatur ketika Anda cdatau menginisialisasi oleh shell.
cuonglm
Tapi apa yang saya katakan adalah bahwa OP lebih mungkin menginginkan $ PWD lama daripada beberapa path absolut ke direktori kerja saat ini dan bahwa dalam beberapa shell (ksh93, ash, yash), seperti dijelaskan di sana, panggilan cdtidak dijamin untuk membuat $ PWD atau output dari pwd path ke direktori saat ini. Anda mencoba untuk menjaga terhadap sesuatu yang tidak mungkin terjadi, tetapi dalam solusi pertama, itu belum tentu efektif, dan yang kedua, itu mengubah perilaku.
Stéphane Chazelas
1
Jika seseorang melakukan mv setelah Anda melakukannya ln, maka Anda berakhir dalam situasi yang sama. Di sisi lain, jika dia melakukannya cd /long/logical/path/to/some/directory, Anda tidak ingin tautan mengarah ke /vg0/lv1/user2/app4(jalur kanonik) karena tautan akan menunjuk ke tempat yang salah ketika /long/logical/path/to/some/directorymenunjuk ke tempat lain.
Stéphane Chazelas