Я хочу ввести команду в скрипт оболонки, який створить символьне посилання на каталог, але цей скрипт можна запускати знову і знову, тому при наступних викликах команда нічого не повинна змінювати.
Ось структура каталогу:
% tree /tmp/test_symlink
/tmp/test_symlink
├── foo
└── repo
└── resources
└── snippets
├── php.snippets
├── sh.snippets
├── snippets.snippets
├── sql.snippets
└── vim.snippets
Я хочу створити символьне посилання у foo/
названих фрагментах, яке вказує на каталог /tmp/test_symlink/repo/resources/snippets
.
Тому я бігаю:
% ln -sfv /tmp/test_symlink/repo/resources/snippets /tmp/test_symlink/foo/snippets
'/tmp/test_symlink/foo/snippets' -> '/tmp/test_symlink/repo/resources/snippets'
що дає бажаний результат.
% 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 каталогів, 5 файлів
Однак, коли команда виконується знову,
% 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'
він створює символьне посилання на каталог, де алеади символьного посилання існує, посилає символьне посилання всередині реального каталогу
% 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
чому це відбувається і як я можу змінити команду, щоб наступні виклики не створили цього дивного ефекту?
-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
чи вважаєте ви, що краще посилатися на симпосилання як на файл завжди? Я б подумав, що краще обмежити використання цих "спеціальних" варіантів?