Diberikan contoh ini:
mkdir a
ln -s a b
ln -s b c
ln -s c d
Jika saya menjalankan:
ls -l d
Ini akan menunjukkan:
d -> c
Apakah ada cara untuk ls
atau perintah linux lainnya untuk ditampilkan d -> c -> b -> a
?
linux
shell
symbolic-link
Kalecser
sumber
sumber
Jawaban:
Cukup gunakan
namei
:sumber
ls
. Terima kasih!readlink -e <link>
catatan: readlink a dengan sendirinya mengembalikan b
Catatan # 2: bersama dengan -l, sebuah utilitas untuk membuat daftar rantai dapat dengan mudah ditulis dalam perl, tetapi juga harus cukup pintar untuk mendeteksi loop
readlink tidak akan menghasilkan apa pun jika Anda memiliki loop. Ini lebih baik daripada terjebak, saya kira.
sumber
brew install coreutils
dangreadlink -e <link>
Berikut adalah fungsi rekursif di Bash:
Pada banyak baris:
Contoh:
Ini membutuhkan
stat(1)
yang mungkin tidak ada pada beberapa sistem.Ini akan gagal jika nama berisi backticks, tanda kutip tunggal, atau "->". Terjebak dalam satu lingkaran dengan loop symlink (ini bisa diselesaikan menggunakan array asosiatif dalam Bash 4). Ini mengekspor variabel yang disebut "rantai" tanpa memperhatikan apakah itu sudah digunakan.
Mungkin ada masalah lain dengan itu.
Edit:
Memperbaiki masalah dengan beberapa symlink relatif. Beberapa masih tidak berfungsi, tetapi versi di bawah ini tidak memerlukan target tautan yang ada.
Menambahkan versi yang menggunakan tautan baca:
sumber
readlink
sepertinya tidak menunjukkan itu. Java pada Ubuntu adalah:/usr/bin/java -> /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk/jre/bin/java
Anda bisa memposting proses namei dengan sesuatu seperti
awk
ataugrep
untuk mendapatkan baris yang Anda inginkan:atau
sumber