作为cygwin下的ksh的替代品,pdksh可能是唯一的选择。但看起来cygwin有一个错误:pdksh(5.2.14-3)支持反斜杠路径(\)。
它会吞下\:
$ cd .\access
pdksh: cd: /cygdrive/e/.access - No such file or directory
在互联网上搜索后,其他平台也解决了同样的问题。但不知道如何为cygwin解决它。
答案 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,包括 SUA和ATT's own port。 Interix SFU
答案 1 :(得分:0)
您必须使用正斜杠或双倍所有反斜杠,或者单引号可能是路径名的每个字符串。对不起,没有办法解决这个问题。这是尝试在Windows上使用Unix shell的一般问题,其中\是一个转义字符。
答案 2 :(得分:0)
注意
尽管可能,但不推荐使用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并在配置文件中进行以下修改。
在最后添加以下代码
wcd()
{
cd $(echo "$@" | sed 's/\\/\\\\/g')
}
保存
输入
wcd ".\access"
连同引号和瞧,你有自己的Windows兼容cd命令。