我似乎遇到了GnuWin32的mkdir (来自here)的一个奇怪的行为:
C:\sandbox>"C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE" --verbose -p Q:/scratch/foo/bar
C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE: created directory `Q:/scratch'
C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE: created directory `Q:/scratch/foo'
C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE: created directory `Q:/scratch/foo/bar'在上面的示例中,当前驱动器是C,目标驱动器是Q。正如预期的那样,在Q:/scratch/foo/bar中创建了分层结构
现在,几乎是相同的示例,但是当前驱动器和目标驱动器都是C。
C:\sandbox>"C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE" --verbose -p C:/scratch/foo/bar
C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE: created directory `C:/scratch'
C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE: created directory `C:/scratch/foo'
C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE: created directory `C:/scratch/foo/bar'mkdir的输出看起来是正确的,并且非常可预测。然而,在C:/scratch/foo/bar中并没有真正创建任何东西。相反,目录层次结构是使用当前目录作为根目录创建的,即创建的是C:/sandbox/scratch/foo/bar
有人能证实吗?这是一个bug吗?如果我有时间,我会看源代码的,但是....
有没有人知道移植到Win32上的比5.3.0更新的CoreUtils版本?
发布于 2021-01-08 00:45:13
看起来确实是一个很小的bug。似乎GnuWin32的端口不喜欢驱动器号后面的冒号后面的正斜杠。使用反斜杠,它可以正确地使用
C:\sandbox> mkdir --verbose -p Q:\scratch/foo/bar和
C:\sandbox> mkdir --verbose -p C:\scratch/foo/bar但是(据报道)当使用正斜杠时,它只有在
C:\sandbox> mkdir --verbose -p Q:/scratch/foo/bar(在上面的中,请注意目标位于与提示符不同的驱动器上),而不是
C:\sandbox> mkdir --verbose -p C:/scratch/foo/bar(在上面的中,请注意目标与提示符在同一驱动器上)
来自UnxUtils的真正旧的mkdir端口一直都有正确的行为。这是我能找到的唯一可行的替代方案。
https://stackoverflow.com/questions/65366338
复制相似问题