Saya mencoba memeriksa apakah ada symlink di bash. Inilah yang saya coba.
mda=/usr/mda
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
mda='/usr/mda'
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
Namun, itu tidak berhasil. Jika '!' ditinggalkan, tidak pernah dipicu. Dan jika '!' apakah ada, itu memicu setiap waktu.
Jawaban:
-L
mengembalikan true jika "file" ada dan merupakan tautan simbolik (file tertaut mungkin ada atau tidak ada). Anda ingin-f
(mengembalikan true jika file ada dan merupakan file biasa) atau mungkin hanya-e
(mengembalikan true jika file ada terlepas dari jenisnya).Menurut manual GNU ,
-h
identik dengan-L
, tetapi menurut manual BSD , itu tidak boleh digunakan:sumber
!
adalahif ! [ -L $mda ]; then .... fi
yaitu menempatkan tanda seru di luar kurung persegi.if [ ! -L "$mda" ]; then ... fi
(catatan:if [ ! ... ]
danif ! [ ... ]
identik :)-L
dan-h
adalah sama .man test
juga mengkonfirmasi ini.-L adalah tes untuk file yang ada dan juga merupakan tautan simbolik
Jika Anda tidak ingin menguji apakah file tersebut merupakan tautan simbolik, tetapi cukup uji untuk melihat apakah file tersebut ada terlepas dari jenisnya (file, direktori, soket, dll.) Kemudian gunakan -e
Jadi jika file benar-benar file dan bukan hanya tautan simbolis Anda dapat melakukan semua tes ini dan mendapatkan status keluar yang nilainya menunjukkan kondisi kesalahan.
sumber
-e "${file}"
gagal jika symlink ada tetapi targetnya tidak ada.Anda dapat memeriksa keberadaan symlink dan tidak ada hubungannya dengan:
Jadi, solusi lengkapnya adalah:
sumber
Mungkin ini yang Anda cari. Untuk memeriksa apakah ada file dan bukan tautan.
Coba perintah ini:
sumber
Bagaimana kalau menggunakan
readlink
?sumber
Apakah file tersebut benar-benar tautan simbolis? Jika tidak, tes untuk keberadaan yang biasa adalah
-r
atau-e
.Lihat
man test
.sumber
Jika Anda menguji keberadaan file yang Anda inginkan -e tidak -L. -L tes untuk symlink.
sumber
pertama yang bisa Anda lakukan dengan gaya ini:
jika Anda ingin melakukannya dengan gaya yang lebih maju, Anda dapat menuliskannya seperti di bawah ini:
hasil di atas seperti:
sumber