谁来管理Cygwin的路径
我很想知道是谁在cygwin管理道路 例如,如果我执行以下操作,它将起作用:谁来管理Cygwin的路径,cygwin,cygpath,Cygwin,Cygpath,我很想知道是谁在cygwin管理道路 例如,如果我执行以下操作,它将起作用: cd C:\ 然而,当我这样做时: $ pwd /cygdrive/c 谁对这里的差异负责? 我好奇的原因是“cd C:”在其他工具中接受windows路径,但在显示它们时,它们会显示一些不同的东西 如果我确实在我的路径中包含cygwin bin文件夹(在常规cmd下),那么我知道它的工作原理与cmd相同,那么是什么导致了这种转换,是bash/shell吗 我很想知道是谁在cygwin管理道路 很大程度上是一个C+
cd C:\
然而,当我这样做时:
$ pwd
/cygdrive/c
谁对这里的差异负责?
我好奇的原因是“cd C:”在其他工具中接受windows路径,但在显示它们时,它们会显示一些不同的东西
如果我确实在我的路径中包含cygwin bin文件夹(在常规cmd下),那么我知道它的工作原理与cmd相同,那么是什么导致了这种转换,是bash/shell吗
我很想知道是谁在cygwin管理道路
很大程度上是一个C++代码中的一小部分。一个特别重要的功能是规范化路径。此代码最终在所有Cygwin应用程序使用的DLL
cygwin1.DLL
中编译
Cygwin中的所有路径都是Cygwin DLL本身解析的“POSIX”路径。normalize_posix_path
函数可识别路径中是否存在某些语法(驱动器号名称和反斜杠),并将它们安排为“Win32路径”
这就是为什么您可以将c:/Users/…
馈送到Cygwin程序,作为/cygdrive/c/Users/…
的替代方案
$pwd
/cygdrive/c
其工作原理是Cygwin维护一个本机Win32当前工作目录,因此它非常清楚这是C:\
。但是,本机信息会向后映射到POSIX路径。Cygwin通过扫描挂载表来实现这一点,它看到C:\
作为/cygdrive/C
被“挂载”。(pwdpwd
实用程序只是报告Cygwin对POSIXgetcwd
函数的实现返回的内容。反向映射发生在该函数内部)。请注意,由于Cygwin在由其装载表创建的虚拟POSIX命名空间中运行,因此该空间包含没有Win32本机对应项的抽象位置。例如,您可以cd
到/dev
目录,在该目录中有tty
等条目。它没有本地位置,因此getcwd
将只报告POSIX路径。当存在共同响应时,Cygwin尝试保持Cygwin内部当前工作目录与Win32目录同步;它不使用SetCurrentDirectory
Win32函数,也不维护Windows驱动器具有单个当前工作目录的概念
如果我确实在我的路径中包含cygwin bin文件夹(在常规cmd下),那么我知道它的工作原理与cmd相同,那么是什么导致了这种转换,是bash/shell吗
实际上,它并不像
cmd
中那样工作!虽然Cygwin程序理解“Win32 ish”路径,但支持还不完整。您可以将类似于D:file.txt
的路径传递给真正的本机Windows程序。它通过与D
驱动器关联的当前目录解析,该目录可以是D:\bob\documents
,在这种情况下,路径代表D:\bob\documents\file.txt
。如果没有这样的目录,那么它代表D:\file.txt
。Cygwin程序无法理解此驱动器相对路径。事实上,D:file.txt
甚至不会被识别为驱动器号引用(从Cygwin 2.5.2开始)。这是因为冒号后面没有目录分隔符(反斜杠或斜杠)。Cygwin的“根”设置为/cygdrive
,因此您指定的任何内容都将与此根相关。因此,如果我将此根更改为C:路径的行为将类似于windows?我怀疑Cygwin是否允许您更改此项,不过,如果您更改了安装位置,它可能会工作。