作为 cygwin 下 ksh 的替代品,pdksh 可能是唯一的选择。但看起来 cygwin 有一个错误:pdksh(5.2.14-3) 支持反斜杠路径 (\)。
它会吞下 \ :
$ cd .\access
pdksh: cd: /cygdrive/e/.access - No such file or directory
在互联网上搜索后,其他平台也解决了同样的问题。但不知道如何为cygwin解决它。
与所有 Cygwin 程序一样,Pdksh 确实支持反斜杠作为目录分隔符。但是你必须正确地引用它们。在 Cygwin 下运行 shell 脚本真的教你正确地引用事物,特别是始终将变量替换放在双引号中,并且不要粗心地使用 echo (printf "%s" "$x"
可移植且可靠:不像echo
,它没有可能进行反斜杠扩展的风险)。
请注意,pdksh 与甚至 ksh88 的兼容性也远非完美,因此某些脚本可能会因其他原因而失败(例如依赖状态码为 的状态码,writer | reader
在reader
真正的 ksh 中是这种情况,但在 pdksh 中不是)。Cygwin 包括zsh
,在您运行之后,它emulate ksh
大部分与 ksh88 兼容(尽管仍然不完美)。
这是该问题的解决方法。开始使用 bash 并在配置文件中进行以下修改。
在最后添加以下代码
wcd()
{
cd $(echo "$@" | sed 's/\\/\\\\/g')
}
保存
类型
wcd ".\access"
除了引号和瞧,您还有自己的与 Windows 兼容的 cd 命令。
笔记
尽管可能使用 Win32 路径,但已弃用,因为它绕过了重要的内部路径处理机制。有关详细信息,请参阅“使用本机 Win32 路径”部分</a>和“在 Cygwin 应用程序中使用 Win32 文件 API”部分</a>。
有一个名为的实用程序cygpath
旨在用于在 Win32 和 POSIX 路径之间转换每种方式的 shell 脚本。
您必须使用正斜杠,或将所有反斜杠加倍,或将每个可能是路径名的字符串单引号。抱歉,没有办法解决这个问题。这是尝试在 Windows 上使用 Unix shell(其中 \ 是转义字符)时遇到的一般问题。