我一直在 Windows 7 Professional 64 位上使用 Cygwin 32 位。我设置了HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ObCaseInsensitive
注册表项,一切正常:我可以获得真正的区分大小写的文件名处理,我可以在同一目录中创建FOO.txt
和。foo.txt
现在 Cygwin 64 位已经发布,我想在 Windows 7 Professional 64 位上试用一下。结果发现 ObCaseInsensitive 注册表项对 Cygwin 64 位无效,因为该项似乎仅适用于 Win32 子系统。Windows 7 Professional 64 位(需要 Enterprise 或 Ultimate)中也不提供基于 UNIX 的应用程序子系统 (SUA)。事实上,我甚至不知道安装 SUA 是否有用。
有人知道是否可以在 Windows 7 Professional 64 位上使用 Cygwin 64 位实现区分大小写的文件名处理?
答案1
区分大小写在 x86_64-cygwin 上有效。请记住,在 64 位 Windows 系统上,实际上有两个注册表,一个用于 32 位进程,另一个用于 64 位进程。(在 Cygwin 中,它们由/proc/registry32
和表示/proc/registry64
。)使用 再次设置密钥regtool -w
并重新启动应该可以为您解决此问题。
答案2
您可以定义一个函数来检查目标目录的大小写(无需更改 Windows 注册表)。这样,我在~/.bash_functions
文件中就有了以下代码:
unset cd_func2 2> /dev/null
unalias cd 2> /dev/null
cd_func2 () {
echo $1 | grep -q '^/' && cd $1 && return 0
for f in `echo $1 | sed -e 's/\// /g'` ; do
_NEW_PATH=$(ls -a | grep -i ^"$f"$)
[ "$_NEW_PATH" ] && cd $_NEW_PATH && continue
echo "Directori inexistent $f" && return 1
done
}
alias cd=cd_func2
编辑:更通用的参数处理。
希望能帮助到你。