Dans un script bash, je sais que je peux vérifier si un fichier est un lien symbolique avec la syntaxe suivante
if [ -L $path ]
Est-ce que quelqu'un sait comment je testerais si ce chemin était lié à un chemin particulier? Par exemple, je veux vérifier si la cible $path
est /some/where
.
readlink
chemin sur le chemin connu et le comparer avec le chemin que vous testez?if [ -L "$path" ]
) sauf si vous avez une bonne raison de ne pas le faire et que vous êtes sûr de savoir ce que vous faites.Réponses:
Si vous souhaitez vérifier s'il
$path
s'agit d'un lien symbolique dont la cible est/some/where
, vous pouvez utiliser l'readlink
utilitaire. Ce n'est pas POSIX, mais il est disponible sur de nombreux systèmes (GNU / Linux, BusyBox, * BSD,…).Notez qu'il s'agit d'une comparaison de texte exacte. Si la cible du lien est
/some//where
, ou si elle estwhere
et que la valeur de$path
est/some/link
, alors les textes ne correspondront pas.De nombreuses versions de
readlink
prennent en charge l'option-f
, qui canonise le chemin en développant tous les liens symboliques.De nombreux shells, notamment dash, ksh, bash et zsh, prennent en charge l'
-ef
opérateur dans letest
module intégré pour tester si deux fichiers sont identiques (liens physiques vers le même fichier, après avoir suivi les liens symboliques). Cette fonctionnalité est également largement prise en charge mais pas POSIX.la source
Pour éviter les problèmes avec un chemin relatif et absolu et "/" à la fin d'un chemin ou d'un lien:
la source
readlink
ne semble pas nécessaire,realpath
résoudra automatiquement le lien symbolique.