Ответ 1
⸻⸻⸻ Короткий ответ ⸻⸻⸻
Определите переменную среды:
CYGWIN=winsymlinks:nativestrict
Как указал mwm, вам также может понадобиться запустить bash от имени администратора.
⸻⸻⸻ длинный ответ ⸻⸻⸻
Симлинки по умолчанию - это обычные файлы
По умолчанию Cygwin создает текстовые файлы в качестве обходного пути для ошибки символьной ссылки Windows. Эти файлы не являются символическими ссылками. Почти все программы Windows не рассматривают эти файлы как символические ссылки.
Родные символические ссылки доступны в последних версиях Windows
Последние NTFS и Windows реализуют символические ссылки:
- Точка соединения NTFS может использоваться в качестве символьной ссылки на каталог, начиная с NTFS 3.0 (Windows 2000) с использованием
linkd
илиjunction
. - Символическая ссылка NTFS также может использоваться как символическая ссылка (как для файла, так и для каталога), поскольку в Windows Vista используется инструмент
mklink
.
Cygwin может создавать собственные символические ссылки NTFS
Упрощенная выписка документации Cygwin:
Символические ссылки
[...]
Cygwin создает символические ссылки потенциально различными способами:
Символические ссылки по умолчанию представляют собой простые файлы, содержащие магический файл cookie, за которым следует путь, на который указывает ссылка. [...]
Символьные ссылки в стиле ярлыков создаются в Windows
.lnk
[...], если переменная окружения CYGWIN [...] установлена на строкуwinsymlinks
илиwinsymlinks:lnk
. [...]Собственные символические ссылки Windows создаются только в Windows Vista/2008 и более поздних версиях и только в файловых системах, поддерживающих точки повторной обработки. Из-за их странных ограничений и поведения они создаются только в том случае, если пользователь явно запрашивает их создание. Это делается путем установки переменной среды CYGWIN, которая будет содержать строку
winsymlinks:native
илиwinsymlinks:nativestrict
. [...]В файловой системе NFS Cygwin всегда создает реальные символические ссылки NFS.
Конфигурирование Cygwin
Руководство пользователя Cygwin представляет переменную CYGWIN
и опцию winsymlinks
:
Переменная окружения
CYGWIN
используется для настройки многих глобальных настроек [...]. Он содержит параметры, перечисленные ниже, разделенные пробелами. [...]
- [...]
- [...]
- [...]
- [...]
winsymlinks:{lnk,native,nativestrict}
- если задано простоwinsymlinks
илиwinsymlinks:lnk
, Cygwin создает символические ссылки в виде ярлыков Windows со специальным заголовком и набором атрибутов R/O.Если установлено значение
winsymlinks:native
илиwinsymlinks:nativestrict
, Cygwin создает символическиеwinsymlinks:nativestrict
как собственные символическиеwinsymlinks:nativestrict
Windows в файловых системах и версиях ОС, поддерживающих их. Если известно, что ОС не поддерживает собственные символические ссылки (Windows XP, Windows Server 2003), предупреждающее сообщение выдается один раз за сеанс.Разница между
winsymlinks:native
иwinsymlinks:nativestrict
заключается в следующем: если файловая система поддерживает нативные символические ссылки, и Cygwin по какой-то причине не может создать нативную символическую ссылку, он будет вынужден создавать стандартные символическиеwinsymlinks:native
Cygwin сwinsymlinks:native
, а сwinsymlinks:nativestrict
системный вызовsymlink(2)
немедленно завершится ошибкой.
CYGWIN=winsymlinks:native
всегда создает ссылку, но использует запасной вариант Cygwin, когда цель не существует
на Cygwin:
$ export CYGWIN="winsymlinks:native"
$ ln -s -v target mylink
'mylink' -> 'target'
$ echo content > target
на MinGW:
$ cat mylink
content
Люди, использующие программы как Windows, так и Cygwin, могут иметь проблемы, когда символическая ссылка создается как фиктивный файл (резервный Cygwin, если цель отсутствует)...
CYGWIN=winsymlinks:nativestrict
всегда использует символическую ссылку native-Windows, но не работает, если цель не существует
на Cygwin:
$ export CYGWIN="winsymlinks:nativestrict"
$ rm -f a b
$ ln -sv a b
ln: failed to create symbolic link 'b': No such file or directory
$ touch b
$ ln -sv a b
ln: failed to create symbolic link 'b': File exists
$ rm b
$ touch a
$ ln -sv a b
'b' -> 'a'
Поскольку nativestrict
требует, чтобы цель существовала до создания символической ссылки, некоторые команды/сценарии могут не работать при создании ссылки.
Примечание. Только администраторы могут создавать собственные символические ссылки NT, поэтому в Windows UAC эмулятор терминала Cygwin (mintty) должен запускаться с повышенными привилегиями (щелкните правой кнопкой мыши ярлык и выберите "Запуск от имени администратора" или задайте свойство ярлыка mintty, Дополнительно → Запустить от имени администратора).