cygwin:pdksh(5.2.14-3)不支持反斜杠路径(\)

时间:2010-08-24 13:43:27

标签: unix cygwin ksh backslash pdksh

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

它会吞下\:

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

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

4 个答案:

答案 0 :(得分:1)

与所有Cygwin程序一样,Pdksh支持反斜杠作为目录分隔符。但你必须正确引用它们。在Cygwin下运行shell脚本真的教你正确引用事物,特别是总是将变量替换为双引号,而不是不小心使用echo(printf "%s" "$x"是可移植的和可靠的:不像{{ 1}},它不存在反斜杠扩展的风险。)

请注意,pdksh与ksh88的兼容性远非完美,因此某些脚本可能由于其他原因而失败(例如依赖echo的状态代码为writer | reader的状态代码,情况就是如此在真正的ksh但不在pdksh)。 Cygwin包括reader,在你运行zsh后,它与ksh88大多兼容(虽然仍然不完美)。

Windows的非Cygwin端口为ksh,包括 Interix SFU SUAATT's own port

答案 1 :(得分:0)

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

答案 2 :(得分:0)

来自Cygwin User's Guide

  

注意

     

尽管可能,但不推荐使用Win32路径,因为它绕过了重要的内部路径处理机制。有关详细信息,请参阅the section called “Using native Win32 paths”the section called “Using the Win32 file API in Cygwin applications”

有一个名为cygpath的实用程序,旨在用于在Win32和POSIX路径之间转换每个路径的shell脚本。

答案 3 :(得分:0)

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

  • 打开〜/ .bashrc
  • 在最后添加以下代码

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

  • 重新加载bash终端。
  • 输入

    wcd ".\access" 
    

    连同引号和瞧,你有自己的Windows兼容cd命令。