J'essaie de vérifier si un lien symbolique existe dans bash. Voici ce que j'ai essayé.
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
Cependant, cela ne fonctionne pas. Si '!' est omis, il ne se déclenche jamais. Et si '!' est là, il se déclenche à chaque fois.
Réponses:
-L
renvoie true si le "fichier" existe et est un lien symbolique (le fichier lié peut exister ou non). Vous voulez-f
(renvoie vrai si le fichier existe et est un fichier normal) ou peut-être juste-e
(retourne vrai si le fichier existe quel que soit le type).Selon la page de manuel GNU ,
-h
est identique à-L
, mais selon la page de manuel BSD , il ne devrait pas être utilisé:la source
!
est deif ! [ -L $mda ]; then .... fi
mettre le point d'exclamation en dehors des crochets.if [ ! -L "$mda" ]; then ... fi
(note:if [ ! ... ]
etif ! [ ... ]
sont identiques :)-L
et ce-h
sont les mêmes .man test
le confirme également.-L est le test pour le fichier existe et est également un lien symbolique
Si vous ne voulez pas tester si le fichier est un lien symbolique, mais juste tester pour voir s'il existe quel que soit le type (fichier, répertoire, socket, etc.), utilisez -e
Donc, si le fichier est vraiment un fichier et pas seulement un lien symbolique, vous pouvez faire tous ces tests et obtenir un état de sortie dont la valeur indique la condition d'erreur.
la source
-e "${file}"
échoue si le lien symbolique existe mais que sa cible n'existe pas.Vous pouvez vérifier l'existence d'un lien symbolique et qu'il n'est pas rompu avec:
Ainsi, la solution complète est:
la source
C'est peut-être ce que vous recherchez. Pour vérifier si un fichier existe et n'est pas un lien.
Essayez cette commande:
la source
Que diriez-vous d'utiliser
readlink
?la source
Le fichier est-il vraiment un lien symbolique? Sinon, le test habituel d'existence est
-r
ou-e
.Tu vois
man test
.la source
Si vous testez l'existence d'un fichier, vous ne voulez -e pas -L. -L teste un lien symbolique.
la source
vous pouvez d'abord faire avec ce style:
si vous voulez le faire dans un style plus avancé, vous pouvez l'écrire comme ci-dessous:
le résultat ci-dessus est comme:
la source