谁来管理Cygwin的路径

谁来管理Cygwin的路径,cygwin,cygpath,Cygwin,Cygpath,我很想知道是谁在cygwin管理道路 例如,如果我执行以下操作,它将起作用: cd C:\ 然而,当我这样做时: $ pwd /cygdrive/c 谁对这里的差异负责? 我好奇的原因是“cd C:”在其他工具中接受windows路径,但在显示它们时,它们会显示一些不同的东西 如果我确实在我的路径中包含cygwin bin文件夹(在常规cmd下),那么我知道它的工作原理与cmd相同,那么是什么导致了这种转换,是bash/shell吗 我很想知道是谁在cygwin管理道路 很大程度上是一个C+

我很想知道是谁在cygwin管理道路

例如,如果我执行以下操作,它将起作用:

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
被“挂载”。(pwd
pwd
实用程序只是报告Cygwin对POSIX
getcwd
函数的实现返回的内容。反向映射发生在该函数内部)。请注意,由于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是否允许您更改此项,不过,如果您更改了安装位置,它可能会工作。