Simbolkan ke folder saat ini sebagai path absolut tanpa mengetikkan seluruh path

10

Symlinks adalah pintasan simpanan untuk jalur relatif:

~/foo ln -s . ~/bar/foo
~/foo ls -l ~/bar
total 8
lrwxr-xr-x    1 me  me     1B 15 May 14:38 foo -> .

File ~/bar/fooadalah symlink ke bardirektori saat ini, yaitu direktori itu sendiri

Bagaimana jika saya ingin membuat symlink di direktori lain ke direktori saya saat itu? Jadi, dalam contoh di atas, saya masuk ~/foodan ingin saya buat ~/bar/foosebagai symlink ke ~/foo. Tentu saja direktori saya saat ini mungkin sedikit lebih lama dari 5 karakter dan mungkin tidak mudah untuk diketik.

Gareth
sumber

Jawaban:

13

Saya akan mengatakan tipe

ln -s $PWD ~/bar/

atau

ln -s `pwd` ~/bar/

Anda bisa menggunakannya juga

ln -s $PWD ~/bar/

tapi saya kira Anda tahu itu dan itu bukan apa yang Anda cari. Jadi, bisakah Anda memperbarui pertanyaan Anda untuk menjelaskan apa tujuan Anda?

Jika path berisi spasi, maka disarankan untuk menggunakan:

ln -s "$PWD" ~/bar/
Huygens
sumber
2
Kutip ganda $variabel Anda dan substitusi perintah, jika tidak, nama file dengan spasi akan menghentikan proses. Anda juga tidak memerlukan akhir $(basename $PWD)(dan Anda lupa $(dan mengutip :-))) karena itu adalah nama tautan default.
Daniel Andersson
Saya pikir saya bodoh. Saya pikir saya mencoba pwdpendekatan dan ada yang salah. Mari kita lakukan itu ke kesalahan ID-sepuluh-T
Gareth
@DanielAndersson Anda benar bahwa itu tidak mendukung spasi di jalur. Poin bagus. jadi sebagai catatan saya akan memperbarui jawabannya :)
Huygens
4

Benar:

ln -s "$(readlink -f .)" ~/bar

(mungkin bagus untuk umum dalam skrip) atau adil

ln -s ~/foo ~/bar

Relatif:

ln -s ../foo ~/bar

Penyelesaian tab akan membantu Anda mengetik.


Dari komentar grawity dan http://lists.gnu.org/archive/html/coreutils-announce/2012-03/msg00000.html :

* Perubahan yang perlu diperhatikan dalam rilis 8.16 (2012-03-26) [stable]

...

lnsekarang menerima --relativeopsi, untuk menghasilkan tautan simbolik relatif ke target, terlepas dari bagaimana target ditentukan.

Jadi dengan versi ini:

ln -s --relative . ~/bar

harus bekerja (dengan dalam praktek identik contoh pertama Anda, dengan penambahan --relativeswitch).

Daniel Andersson
sumber
4
Coreutils terbaru dapat secara otomatis membuat symlink relatif menggunakan ln -s -r foo ~/bar.
user1686
@grawity: Menarik. Belum di sistem saya, rupanya (Debian Sid).
Daniel Andersson
Tampaknya telah ditambahkan untuk v8.16 pada 22 Maret, menurut git.
user1686
1
Juga, apa keuntungan dari $(readlink -f .)atas $PWD?
user1686
2
@ kegembiraan: Tidak banyak. Mereka bekerja secara berbeda jika direktori kerja saat ini telah dijangkau oleh sebuah tautan. readlink -fkemudian akan symlink ke jalur target absolut dari direktori saat ini, sementara $PWDsymlink ke direktori literal saat ini masuk Apa yang diinginkan mungkin berbeda dari waktu ke waktu, dan pertama dan terutama mungkin bukan masalah sama sekali.
Daniel Andersson