Доступ к символической ссылке cygwin из окон

Я совершенно новый для cygwin. Я создал символическую ссылку следующим образом

$ ln -s /var/www /cygdrive/d/foo

и когда я проверяю диск D через окна, я вижу системный файл с именем foo. Есть ли способ сделать foo действовать как папка для Windows вместо системного файла?

Ответ 1

Не то, чтобы я знал. Cygwin не обновляет ОС, чтобы иметь символические ссылки, скорее, это позволяет вам "подделывать" символические ссылки из оболочки Cygwin. Вы можете настроить оболочку для использования файлов LNK Windows, которые могут делать то, что вы хотите, но...

Из Документация Cygwin:

Создание ярлыков с cygutils

Другая проблемная область находится между Ссылки в стиле Unix, которые связывают один файл к другому, и к файлам Microsoft.lnk, которые предоставляют ярлык для файла. Они кажутся похожими на первый взгляд, но, в действительности, довольно разные. От по умолчанию, Cygwin не создает symlinks как .lnk файлы, но есть вариант для этого, см. раздел называется "среда CYGWIN переменная". Эти файлы symlink.lnk совместимы с Windows-созданными .lnk, но они все еще другой. Они не включают большую часть информация, доступная в стандартный ярлык Microsoft, например рабочий каталог, значок и т.д. Пакет cygutils включает Утилита mkshortcut для создания стандартных файлов Microsoft.lnk.

Но вот проблема. Если Cygwin обработали эти собственные ярлыки, как любая другая символическая ссылка, вы не могли бы архив Microsoft.lnk файлы в tar архивы и хранить всю информацию в них. После распаковки эти ярлыки потеряли бы все дополнительная информация и не будет отличается от стандартного Cygwin символьные ссылки. Поэтому эти два типа ссылки обрабатываются по-разному. К сожалению, это означает, что обычный способ создания и использования Unix symlinks не работает с Быстрые клавиши Windows.

Ответ 3

Windows не сможет читать символические ссылки, созданные Cygwin, но вы можете создавать символические ссылки Windows с помощью команд Windows, а Cygwin будет рассматривать их как символические ссылки.

В Vista и 7 это можно сделать с помощью "mklink". Это встроенный cmd.exe, а не автономная утилита, поэтому, если вы хотите вызывать его из оболочки bash, вам нужно сделать "cmd/c mklink", и, конечно, это будет понимать только пути Windows.

Для XP в "Средстве набора ресурсов Windows" содержится утилита linkd, которая может использоваться для создания ссылок на каталоги.

Ответ 4

Один альтернативный способ вызова mklink (/d создает ссылку на каталог) без функции:

link_name="/cygdrive/c/TestLink"
target_dir="/cygwin/c/Windows"
cmd /c mklink /d "`cygpath -w \"$link_name\"`" "`cygpath -w \"$target_dir\"`"

В этом примере используются обратные ссылки (`command`) для замены команд.