Warum fragt ln -s nicht, dass es fehlschlägt, wenn ein Symlink zu einem vorhandenen Symlink-Verzeichnis erstellt wird?

1851
giZm0

Beim Laufen (auf Linux verschiedene Ubuntu-Varianten):

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

Es schlägt fehl, ohne zu sagen, dass es fehlschlägt. Wenn Sie jedoch dasselbe für eine Datei tun, oder fügen Sie der Option v der Option hinzu, bedeutet dies, dass sie fehlschlägt:

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

oder

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

Es schlägt fehl mit der Fehlermeldung msg:

ln: failed to create symbolic link 

Für mich scheint das ein sehr seltsames Verhalten zu sein? Gibt es dafür einen Grund?

2
Die Frage wurde [Cross-Posted on Unix & Linux] (http://unix.stackexchange.com/questions/51963/why-doesnt-ln-s-tell-that-it-fails-when-creating-a-symlink -auf-ein-existent-syml) Der Hochstapler vor 10 Jahren 0

1 Antwort auf die Frage

3
dset0x

It does not actually fail. It creates your link inside the given directory:

% 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 

This behaviour is described in the manpage:

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

However, this link fails to link back to dir_2 as it is not set properly. This is also expected behaviour though, and not meant to fail. From the manpage:

Symbolic links can hold arbitrary text; if later resolved, a relative link is interpreted in relation to its parent directory.

By the way, it works the same way for me even with -sv. Maybe you are using a different implementation of ln. Are you sure you are not using -T? Maybe that is set in your ~/.bashrc/~/.zshrc/etc. Try which ln.

-sv funktioniert genauso, ja. Aber es sagt Ihnen, dass etwas schief gelaufen ist. Was wahrscheinlich daran liegt, dass Sie es haben, ist ein "Borken" -Link giZm0 vor 12 Jahren 0
@ giZm0 Es wird kein Fehler für mich ausgegeben. Wie Sie in der manpage blockquote oben sehen können, sollte es zumindest erstellt werden, auch wenn es Sie darauf hinweist, dass es keine Verknüpfung zu einem vorhandenen Element gibt:% mkdir ab% ln -sv ac 'c' -> 'a'% ln -sv bc 'c / b' -> 'b' dset0x vor 12 Jahren 1
Wie ich bereits in [cross-post] (http://unix.stackexchange.com/a/122826/50855) geantwortet habe, führt die Angabe von '-ns' dazu, dass 'ln' wie gewünscht fehlschlägt. "-v" ist für das Ergebnis irrelevant. A-B-B vor 10 Jahren 0