Comment vérifier si un lien symbolique correspond à un chemin spécifique?
Je suis de la création d'un script bash pour vérifier si un lien symbolique correspond à un chemin spécifique donc dans le cas où il ne correspond pas, le script supprime le lien. J'ai essayé avec readlink
:
#!/bin/env bash
target_path=$HOME/Code/slate/.slate.js
if [ `readlink $HOME/.slate.js` == "$target_path" ]; then
rm -rf "$HOME/.slate.js"
fi
mais ça ne fonctionne pas:
%source test
test:5: = not found
- readlink $HOME/.slate.js ne renvoie pas exactement de la même façon que $target_path il peut retourner quelque chose comme Code/slate/.slate.js qui est différent de $target_path
- Ne
$HOME
ont un espace, peut-être? - echo tous les deux pour vérifier réellement qu'ils sont égaux
test
est probablement pas un bon nom pour un script shell, comme c'est déjà une coque intégrée et d'un binaire dans/bin
(ou/usr/bin
)...
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser des guillemets doubles comme suivre lorsque vous comparez des chaînes (et oui, la sortie de
readlink $HOME/.slate.js
est une chaîne de caractères):En cas
$target_path
ne correspond pas au texte du lien exactement, vous pouvez vérifier qu'ils sont, en fait l'équivalent (quel que soit leur nom). Mais depuis un hardlink est préférable que vous pourriez vouloir vérifier ce cas (voir ci-dessous).Plus génériques, la solution est:
Ou, comme dans votre exemple:
Mais que tous les suppose que votre
$HOME/.slate.js
est un lien symbolique. Si c'est un lien en dur (ce qui est préférable, lorsque cela est possible), alors c'est plus simple:Peut-être quelque chose comme (vérifier si c'est un lien symbolique, le cas échéant, vérifiez que le lien correspond à la cible; sinon, vérifier si les fichiers de même un lien en dur ou en fait le même fichier):
Vous devriez également vérifier si le fichier est, en fait, le même fichier (et non pas un lien en dur), sinon, vous devrez supprimer le seul et unique exemplaire.