Pourquoi ln -s ne s’informe-t-il pas qu’il échoue lors de la création d’un lien symbolique vers un répertoire lié existant? [fermé]


2

Lors de l'exécution (sur différentes variantes d'ubuntu sous Linux):

>ln -s dir_1 symlink_dir
>ln -s dir_2 symlink_dir

Il échoue sans dire qu'il échoue. Mais si vous faites la même chose sur un fichier à la place ou, ajoutez v à l'option, elle vous avertit que cela échoue:

>ln -s file_1 symlinkg_file
>ln -s file_2 symlinkg_file

ou

>ln -sv dir_1 symlink_dir
>ln -sv dir_2 symlink_dir

Il échoue avec le message d'erreur:

ln: failed to create symbolic link

Pour moi, cela semble être un comportement très étrange? Y a-t-il une raison à cela?


Réponses:


3

Cela n'échoue pas réellement. Il crée votre lien dans le répertoire donné:

% mkdir dir_1 dir_2
% ln -s dir_1 symlink_dir
% ln -s dir_2 symlink_dir
% ls -l
total 0
drwxr-xr-x 2 user group 60 Oct 16 12:47 dir_1
drwxr-xr-x 2 user group 40 Oct 16 12:47 dir_2
lrwxrwxrwx 1 user group  5 Oct 16 12:47 symlink_dir -> dir_1
% ls -l dir_1
total 0
lrwxrwxrwx 1 user group  5 Oct 16 12:47 dir_2 -> dir_2

Ce comportement est décrit dans la page de manuel:

 ln [OPTION]... TARGET... DIRECTORY     (3rd form)
 ...
 In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.

Cependant, ce lien ne parvient pas à renvoyer à dir_2 car il n'est pas défini correctement. Ce comportement est également attendu et ne doit pas échouer. De la page de manuel:

Les liens symboliques peuvent contenir du texte arbitraire; s'il est résolu ultérieurement, un lien relatif est interprété par rapport à son répertoire parent.

À propos, cela fonctionne de la même manière pour moi même avec -sv. Peut-être que vous utilisez une implémentation différente de ln. Êtes-vous sûr de ne pas utiliser -T? Peut-être que cela est défini dans votre ~/.bashrc/ ~/.zshrc/ etc. Essayez which ln.


-sv fonctionne de la même manière oui. Mais cela vous dit que quelque chose ne va pas. Ce qui est probablement parce que vous avez c'est un lien "borken"
giZm0

1
@ giZm0 Il ne génère aucune erreur pour moi. Comme vous pouvez le voir dans la page de manuel blockquote ci-dessus, il devrait au moins la créer, même si elle vous avertit qu'elle n'est pas liée à quelque chose qui existe:% mkdir ab% ln -sv ac 'c' -> 'a'% ln -sv bc 'c / b' -> 'b'
dset0x

Comme j'ai répondu dans le message croisé , la spécification de -nsmake lnéchoue comme vous le souhaitez. -vest sans rapport avec le résultat.
Acumenus
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.