【问题标题】:Invoking dos command form Perl doesn’t work properly after installing Chef安装 Chef 后从 Perl 调用 dos 命令无法正常工作
【发布时间】:2014-04-12 08:49:18
【问题描述】:

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

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

【问题讨论】:

  • dir 是 DOS 内置命令,而不是真正的命令。也许试试cmd /C dir /AD .
  • 那行得通。但我真的很想知道为什么安装 Chef 会影响 Perl 中内置的运行 dos。直接调用内置的dos,在我们的系统中没有任何问题。

标签: perl chef-infra perl-core


【解决方案1】:

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 是否/如何导致问题。暂时没有其他要添加的内容。

【讨论】:

  • 感谢您的尝试和建议。我刚刚在我的帖子中添加了更多信息。在我安装 Chef 之前,内置的 dos 可以正常工作。我同意避免特定于操作系统的内置插件的最佳做法。但我正在处理一个内部使用的相当大的遗留项目,这些内置项目无处不在。我暂时不会争论它是好是坏。我想先了解安装 Chef 客户端的影响。你使用什么版本的 Perl?
  • 修改了我的答案以包括我的系统规格。
  • 再次感谢您的信息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
相关资源
最近更新 更多