Ich versuche zu überprüfen, ob in bash ein Symlink vorhanden ist. Folgendes habe ich versucht.
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
Das funktioniert jedoch nicht. Wenn '!' wird ausgelassen, es wird nie ausgelöst. Und wenn '!' ist da, es wird jedes Mal ausgelöst.
Antworten:
-L
Gibt true zurück, wenn die "Datei" vorhanden ist und eine symbolische Verknüpfung darstellt (die verknüpfte Datei kann vorhanden sein oder nicht). Sie möchten-f
(gibt true zurück, wenn eine Datei vorhanden ist und eine reguläre Datei ist) oder einfach-e
(gibt true zurück, wenn die Datei unabhängig vom Typ vorhanden ist).Gemäß dem GNU manpage ,
-h
ist identisch mit-L
, aber nach dem BSD manpage , sollte es nicht verwendet werden:quelle
!
istif ! [ -L $mda ]; then .... fi
also das Ausrufezeichen setzen außerhalb der eckigen Klammern.if [ ! -L "$mda" ]; then ... fi
(Anmerkung:if [ ! ... ]
undif ! [ ... ]
sind identisch :)-L
und-h
sind gleich .man test
bestätigt dies auch.-L ist der Test für Datei vorhanden und ist auch eine symbolische Verknüpfung
Wenn Sie nicht testen möchten, ob die Datei ein symbolischer Link ist, sondern nur testen möchten, ob sie unabhängig vom Typ (Datei, Verzeichnis, Socket usw.) vorhanden ist, verwenden Sie -e
Wenn es sich bei der Datei also wirklich um eine Datei handelt und nicht nur um einen symbolischen Link, können Sie alle diese Tests durchführen und einen Exit-Status erhalten, dessen Wert den Fehlerzustand angibt.
quelle
-e "${file}"
schlägt fehl, wenn der Symlink vorhanden ist, sein Ziel jedoch nicht vorhanden ist.Sie können überprüfen, ob ein Symlink vorhanden ist und ob er nicht beschädigt ist mit:
Die Komplettlösung lautet also:
quelle
Vielleicht ist es das, wonach Sie suchen. Um zu überprüfen, ob eine Datei vorhanden ist und kein Link ist.
Versuchen Sie diesen Befehl:
quelle
Wie wäre es mit
readlink
?quelle
Ist die Datei wirklich ein symbolischer Link? Wenn nicht, ist der übliche Existenztest
-r
oder-e
.Siehe
man test
.quelle
Wenn Sie die Existenz von Dateien testen, möchten Sie -e nicht -L. -L testet auf einen Symlink.
quelle
Zuerst können Sie mit diesem Stil tun:
Wenn Sie es in einem fortgeschritteneren Stil machen möchten, können Sie es wie folgt schreiben:
Das Ergebnis von oben ist wie folgt:
quelle