⸻⸻⸻简答⸻⸻⸻
定义环境变量:
CYGWIN=winsymlinks:nativestrict
正如mwm所指出的,您可能还必须以管理员身份运行bash 。
⸻⸻⸻长答案⸻⸻⸻
默认 Cygwin 符号链接只是常规文件
默认情况下, Cygwin创建文本文件作为 Windows 符号链接缺陷的解决方法。这些文件并不是真正的符号链接。几乎所有 Windows 程序都不将这些文件视为符号链接。
本机符号链接在最新的 Windows 版本上可用
最近的 NTFS 和 Windows 实现了符号链接:
Cygwin 文档的简化摘录:
符号链接
[...]
Cygwin 可能以多种不同的方式创建符号链接:
默认符号链接是普通文件,其中包含一个魔术 cookie,后跟链接指向的路径。[...]
如果环境变量CYGWIN .lnk
[...] 设置为包含字符串winsymlinks
或winsymlinks:lnk
. [...]
本机 Windows 符号链接仅在 Windows Vista/2008 及更高版本上创建,并且仅在支持重解析点的文件系统上创建。由于它们奇怪的限制和行为,它们只有在用户明确请求创建它们时才会被创建。这是通过将环境变量 CYGWIN 设置为包含字符串winsymlinks:native
或winsymlinks:nativestrict
. [...]
在 NFS 文件系统上,Cygwin 总是创建真正的 NFS 符号链接。
配置 Cygwin
Cygwin 用户指南提供变量CYGWIN
和选项winsymlinks
:
CYGWIN
环境变量用于配置许多全局设置 [...] 。它包含下面列出的选项,以空白字符分隔。[...]
- [...]
- [...]
- [...]
- [...]
winsymlinks:{lnk,native,nativestrict}
- 如果设置为 just winsymlinks
or winsymlinks:lnk
,Cygwin 将创建符号链接作为带有特殊标题和 R/O 属性集的 Windows 快捷方式。
如果设置为winsymlinks:native
or winsymlinks:nativestrict
,Cygwin 在文件系统和支持它们的操作系统版本上创建符号链接作为本地 Windows 符号链接。如果已知操作系统不支持本机符号链接(Windows XP、Windows Server 2003),则每个会话都会生成一次警告消息。
winsymlinks:native
和
之间的区别在于winsymlinks:nativestrict
:如果文件系统支持本机符号链接并且 Cygwin 由于某种原因未能创建本机符号链接,它将回退到创建 Cygwin 默认符号链接 with
winsymlinks:native
,而 with系统调用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
始终使用本机 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 快捷方式属性,高级 →以管理员身份运行)。
特别感谢Guria和Spooky的贡献。