Voici mon code pour créer un lien symbolique d’un répertoire:
Sudo ln -s /usr/local/nginx/conf/ /etc/nginx
J'ai déjà créé le répertoire /etc/nginx
. Je veux juste que le contenu du répertoire source (/usr/local/nginx/conf/
) soit dans le contenu du répertoire cible (/etc/nginx
). Mais lorsque j'exécute le code, /etc/nginx
contient un répertoire nommé conf
, au lieu du contenu de conf
. Ce répertoire contient le contenu que je veux, mais au mauvais endroit.
Pourquoi a-t-il placé un répertoire dans le dossier cible au lieu de simplement placer son contenu dans le dossier cible?
C'est le comportement de ln
si le deuxième argument est un répertoire. Il place un lien vers le premier argument à l'intérieur. Si vous voulez que /etc/nginx
soit le lien symbolique, vous devez d'abord supprimer ce répertoire et exécuter la même commande.
C'est ce que ln
est documenté pour faire quand la cible existe déjà et est un répertoire. Si vous voulez que /etc/nginx
soit be un lien symbolique plutôt que contient un lien symbolique, vous feriez mieux de ne pas le créer d'abord comme répertoire!
Dans le script est utile quelque chose comme ceci:
if [ ! -d /etc/nginx ]; then ln -s /usr/local/nginx/conf/ /etc/nginx > /dev/null 2>&1; fi
il empêche avant de recréer un "mauvais" lien symbolique en boucle après une nouvelle exécution du script