0

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

它会吞下 \ :

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

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

4

4 回答 4

1

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

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

Windows 有非 Cygwin 的 ksh 端口,包括Interix SFU SUAATT 自己的端口

于 2010-08-25T23:35:26.403 回答
0

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

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

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

  • 重新加载 bash 终端。
  • 类型

    wcd ".\access" 
    

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

于 2011-12-22T23:42:59.383 回答
0

Cygwin 用户指南

笔记

尽管可能使用 Win32 路径,但已弃用,因为它绕过了重要的内部路径处理机制。有关详细信息,请参阅“使用本机 Win32 路径”部分</a>和“在 Cygwin 应用程序中使用 Win32 文件 API”部分</a>。

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

于 2010-08-24T18:31:41.287 回答
0

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

于 2010-08-24T18:16:21.153 回答