2014-04-10 20 views
0

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

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

+0

'dir'是DOS内置的,不是真正的命令。也许试试'cmd/C dir/AD .'? – mob

+0

工作。但我真的很想知道厨师安装如何影响Perl内置的运行内核。调用内置的dos直接用于我们的系统中没有任何问题。 – Tuzki

回答

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 perl的草莓5.18.2

C:\>perl -v 

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

鉴于你已经分享了关于任务范围的内容,我认为暴民的解决方案可能是你最好的选择。是的,如果必须更换所有这些反向拨号电话``qx(),但我并没有预见到更好的选择,这将是一件痛苦的事情。祝你好运,看看厨师是如何引起这个问题的。现在没有其他任何东西要添加。

+0

感谢您尝试此操作和建议。我只是在我的帖子中添加了更多信息。直到我安装厨师之前,内置的dos用于无任何问题地工作。我同意避免操作系统特定的内置插件的最佳做法。但我正在研究一个内部使用的相当大的遗留项目,而这些内置项目只是处处可见。我现在不会争论它是好事还是坏事。我想先了解Chef客户端安装的影响。你使用什么版本的Perl? – Tuzki

+0

修改了我的答案以包含我的系统规格。 – Miller

+0

再次感谢您的信息! – Tuzki