Unix cygwin:pdksh(5.2.14-3)没有';不支持反斜杠路径(\)

Unix cygwin:pdksh(5.2.14-3)没有';不支持反斜杠路径(\),unix,cygwin,ksh,backslash,pdksh,Unix,Cygwin,Ksh,Backslash,Pdksh,作为cygwin下ksh的替代品,pdksh可能是唯一的选择。但是看起来cygwin有一个bug:pdksh(5.2.14-3)支持反斜杠路径(\) 它将吞下\: $ cd .\access pdksh: cd: /cygdrive/e/.access - No such file or directory 在互联网上搜索后,其他平台也解决了同样的问题。但是不知道如何为cygwin解决这个问题。您必须使用正斜杠,或者将所有反斜杠加倍,或者对可能是路径名的每个字符串使用单引号。对不起,这是没办法

作为cygwin下ksh的替代品,pdksh可能是唯一的选择。但是看起来cygwin有一个bug:pdksh(5.2.14-3)支持反斜杠路径(\)

它将吞下\:

$ cd .\access
pdksh: cd: /cygdrive/e/.access - No such file or directory

在互联网上搜索后,其他平台也解决了同样的问题。但是不知道如何为cygwin解决这个问题。

您必须使用正斜杠,或者将所有反斜杠加倍,或者对可能是路径名的每个字符串使用单引号。对不起,这是没办法的。这是在Windows上尝试使用Unix Shell时遇到的一个常见问题,其中\是转义字符。

来自:

注 Win32路径的使用虽然可能,但不推荐使用,因为它绕过了重要的内部路径处理机制。有关更多信息,请参阅和


有一个名为的实用程序,设计用于在Win32和POSIX路径之间进行双向转换的shell脚本中。

Pdksh与所有Cygwin程序一样,支持反斜杠作为目录分隔符。但你必须正确地引用它们。在Cygwin下运行shell脚本确实教会了您正确地引用内容,特别是始终将变量替换放在双引号中,并且不要随意使用echo(
printf“%s”“$x”
是可移植和可靠的:与
echo
不同,它不会进行反斜杠扩展)

请注意,pdksh甚至与ksh88的兼容性也远远不够完美,因此一些脚本可能由于其他原因而失败(例如依赖于
writer | reader
的状态代码是
reader
,这在真正的ksh中是如此,但在pdksh中不是如此)。Cygwin包括
zsh
,在运行
emulate ksh
后,它与ksh88基本兼容(尽管仍然不完美)


ksh for Windows有非Cygwin端口,包括Interix和。

这里有一个解决问题的方法。开始使用bash并在配置文件中进行以下修改

  • Open~/.bashrc
  • 在末尾添加以下代码

    wcd() 
    {  
        cd $(echo "$@" | sed 's/\\/\\\\/g')   
    }
    
  • 省省吧

  • 重新加载bash终端
  • 类型

    wcd ".\access" 
    
    除了引号和瞧,您还有自己的windows兼容cd命令