Ich möchte einen Befehl in ein Shell-Skript einfügen, das einen Symlink zu einem Verzeichnis erstellt, aber dieses Skript könnte immer wieder ausgeführt werden, sodass der Befehl bei nachfolgenden Aufrufen nichts ändern sollte.
Hier ist die Verzeichnisstruktur:
% tree /tmp/test_symlink
/tmp/test_symlink
├── foo
└── repo
└── resources
└── snippets
├── php.snippets
├── sh.snippets
├── snippets.snippets
├── sql.snippets
└── vim.snippets
Ich möchte einen Symlink in foo/
sogenannten Snippets erstellen, der auf das Verzeichnis verweist /tmp/test_symlink/repo/resources/snippets
.
Also laufe ich:
% ln -sfv /tmp/test_symlink/repo/resources/snippets /tmp/test_symlink/foo/snippets
'/tmp/test_symlink/foo/snippets' -> '/tmp/test_symlink/repo/resources/snippets'
was das gewünschte Ergebnis ergibt.
% tree /tmp/test_symlink
/tmp/test_symlink
├── foo
│ └── snippets -> /tmp/test_symlink/repo/resources/snippets
└── repo
└── resources
└── snippets
├── php.snippets
├── sh.snippets
├── snippets.snippets
├── sql.snippets
└── vim.snippets
5 Verzeichnisse, 5 Dateien
Wenn der Befehl jedoch erneut ausgeführt wird,
% ln -sfv /tmp/test_symlink/repo/resources/snippets /tmp/test_symlink/foo/snippets
'/tmp/test_symlink/foo/snippets/snippets' -> '/tmp/test_symlink/repo/resources/snippets'
Es wird ein Symlink zu einem Verzeichnis erstellt, in dem der Symlink bereits vorhanden ist. Symlink wird in das reale Verzeichnis eingefügt
% tree /tmp/test_symlink
/tmp/test_symlink
├── foo
│ └── snippets -> /tmp/test_symlink/repo/resources/snippets
└── repo
└── resources
└── snippets
├── php.snippets
├── sh.snippets
├── snippets -> /tmp/test_symlink/repo/resources/snippets
├── snippets.snippets
├── sql.snippets
└── vim.snippets
Warum passiert das und wie kann ich den Befehl so ändern, dass nachfolgende Aufrufe diesen seltsamen Effekt nicht erzeugen?
-n, --no-dereference treat LINK_NAME as a normal file if it is a symbolic link to a directory
.-T, --no-target-directory treat LINK_NAME as a normal file always
halten Sie es für besser, einen Symlink immer als Datei zu behandeln? Ich hätte gedacht, es wäre besser, die Verwendung dieser "speziellen" Optionen zu begrenzen?