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?
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.
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é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 mvsetelah 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.
"$PWD"
di kerang POSIX dan~0
dizsh
.Kamu harus menggunakan:
atau:
untuk mendapatkan hasil yang tepat untuk direktori kerja saat ini. Itu dapat diubah saat Anda bekerja di dalamnya seperti dalam pertanyaan ini .
sumber
$PWD
(jalur yang digunakannya untuk sampai ke sana), bukan$(pwd -P)
(jalur kanonik ke direktori saat ini). Jika$PWD
tidak lagi menunjuk ke direktori saat ini, maka tidak ada yang$(pwd -P)
akan mengatakan pada menit berikutnya juga."$PWD"
masih memiliki nilai lama jika direktori saat ini dipindahkan.PWD
hanya diatur ketika Andacd
atau menginisialisasi oleh shell.cd
tidak 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.mv
setelah Anda melakukannyaln
, maka Anda berakhir dalam situasi yang sama. Di sisi lain, jika dia melakukannyacd /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/directory
menunjuk ke tempat lain.