【问题标题】:cygwin : pdksh(5.2.14-3) doesn't support backslash path (\)cygwin:pdksh(5.2.14-3) 不支持反斜杠路径 (\)
【发布时间】:2010-08-24 13:43:26
【问题描述】:

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

它会吞下 \ :

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

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

【问题讨论】:

    标签: unix cygwin ksh backslash pdksh


    【解决方案1】:

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

    请注意,pdksh 与甚至 ksh88 的兼容性远非完美,因此某些脚本可能会因其他原因而失败(例如依赖 writer | reader 的状态码是 reader 的状态码,在真正的 ksh 中就是这种情况,但不在 pdksh 中)。 Cygwin 包含zsh,在你运行emulate ksh 之后,它大部分与ksh88 兼容(尽管仍然不完美)。

    Windows 有非 Cygwin 的 ksh 端口,包括 InterixSFUSUAATT's own port

    【讨论】:

      【解决方案2】:

      您必须使用正斜杠,或将所有反斜杠加倍,或将每个可能是路径名的字符串单引号。抱歉,没有办法解决这个问题。这是尝试在 Windows 上使用 Unix shell(其中 \ 是转义字符)时遇到的一般问题。

      【讨论】:

        【解决方案3】:

        来自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 脚本。

        【讨论】:

          【解决方案4】:

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

          • 打开~/.bashrc
          • 在最后添加如下代码

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

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

            wcd ".\access" 
            

            除了引号和瞧,您还有自己的 Windows 兼容 cd 命令。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-05-15
            • 2012-11-16
            • 2013-07-23
            • 2012-08-30
            • 2014-02-04
            • 2017-03-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多