0

在 Windows 上安装 Chef 后,我发现如果某些 dos 命令包含正斜杠,则它们不再在 Perl 中工作。例如,`dir /AD .`在 Perl 中运行现在会给您一些警告,例如dir: /AD: No such file or directory. 我知道正斜杠指向 chef-client 进程当前工作目录的根目录。但这真的很烦人,这也会影响 Perl。有没有什么办法解决这一问题?谢谢。

澄清问题的更多信息:我正在使用带有 ActivePerl 5.8.8 和 Chef 客户端 11.12.2-1 的相当干净的 win7 64 位机器。该问题显然与 Chef 安装有关。首先,当我安装和卸载 Chef 客户端时,它会打开和关闭。其次,当我运行时dir /,它会列出 C:\opscode\chef\embedded 文件夹的内容。

4

1 回答 1

3

Chef不会造成任何问题。我的系统对命令的响应相同:my @dirs = `dir /AD .`. 在返回当前目录中的所有文件之前,它将/AD视为一个目录而不是一个抛出相同错误消息的标志。"dir: /AD: No such file or directory"

使用 mob 的评论解决方案my @dirs = `cmd /C dir /AD .`修复了该问题并根据需要返回目录列表。

但是,解决此问题的最佳方法是通过不依赖操作系统特定的内置函数来使您的 perl 代码跨平台兼容。例如,使用以下命令可以轻松获取 cwd 中的目录列表:

my @dirs = grep -d, <*>;

更新

我在 Windows 7 x64 上运行 Strawberry perl 5.18.2

C:\>perl -v

This is perl 5, version 18, subversion 2 (v5.18.2) built for MSWin32-x64-multi-thread

鉴于您所分享的任务范围,我认为 mob 的解决方案可能是您最好的选择。是的,必须替换所有这些反引号``qx()调用会很痛苦,但我没有预见到更好的选择。祝你好运,弄清楚 Chef 是否/如何导致问题。暂时没有其他要添加的内容。

于 2014-04-10T23:27:17.947 回答