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

发布于 2024-09-15 23:01:47 字数 253 浏览 9 评论 0原文

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

它会吞掉\:

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

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

as an replacement for ksh under cygwin, pdksh might be the only choice. but look like there have a bug for cygwin : pdksh(5.2.14-3) to support backslash path (\).

it will swallow the \ :

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

After search on the internet, the same problem solved for other platform. but no idea how to solve it for cygwin.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

风和你 2024-09-22 23:01:47

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

请注意,pdksh 与 ksh88 的兼容性也远非完美,因此某些脚本可能会因其他原因而失败(例如依赖 writer | reader 的状态代码为 reader ,这是 true ksh 中的情况,但不是 pdksh 中的情况)。 Cygwin 包含 zsh,在运行emulate ksh 后,它基本上与 ksh88 兼容(尽管仍然不完美)。

适用于 Windows 的 ksh 有非 Cygwin 端口,包括 InterixSFU SUAATT 自己的端口

Pdksh, like all Cygwin programs, does support backslashes as directory separators. But you have to quote them properly. Running shell scripts under Cygwin really teaches you to quote things properly, in particular to always put variable substitutions in double quotes, and not use echo carelessly (printf "%s" "$x" is portable and reliable: unlike echo, there's no risk that it might do backslash expansion).

Note that pdksh's compatibility with even ksh88 is far from perfect, so some scripts may fail for other reasons (such as relying on the status code of writer | reader being that of reader, which is the case in true ksh but not in pdksh). Cygwin includes zsh, which after you run emulate ksh is mostly compatible with ksh88 (though still not perfect).

There are non-Cygwin ports of ksh for Windows, including InterixSFUSUA and ATT's own port.

若沐 2024-09-22 23:01:47

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

You have to use forward slashes, or double all the backslashes, or single-quote every string that might be a pathname. Sorry, there's no way around this. This is a general problem with trying to use Unix shells, for which \ is an escape character, on Windows.

独自←快乐 2024-09-22 23:01:47

来自 Cygwin 用户指南

注意

尽管可以使用 Win32 路径,但已不推荐使用,因为它绕过了重要的内部路径处理机制。请参阅“使用本机 Win32 路径”部分名为“在 Cygwin 中使用 Win32 文件 API”的部分应用程序”了解更多信息。

有一个名为 cygpath< 的实用程序/a> 设计用于在 Win32 和 POSIX 路径之间转换每种方式的 shell 脚本中使用。

From the Cygwin User's Guide:

Note

The usage of Win32 paths, though possible, is deprecated, since it circumvents important internal path handling mechanisms. See the section called “Using native Win32 paths” and the section called “Using the Win32 file API in Cygwin applications” for more information.

There is a utility called cygpath that is designed to be used in shell scripts that converts each way between Win32 and POSIX paths.

も让我眼熟你 2024-09-22 23:01:47

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

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

    <前><代码>wcd()
    {
    cd $(echo "$@" | sed 's/\\/\\\\/g')
    }

  • 保存

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

    wcd ".\access" 
    

    加上引号,瞧,您就有了自己的 Windows 兼容的 cd 命令。

Here's a workaround for the problem. Start using bash and make the following modifications in config files.

  • Open ~/.bashrc
  • Add the following code at the end

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

  • Reload bash terminal.
  • Type

    wcd ".\access" 
    

    along with the quotes and voila, you have your own windows compatible cd command.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文