1

我正在编写一个脚本,根据我的要求安装和配置 Nagios。它需要 cpanm 和一些 perl 模块。

它使用此处的 step/try/next 函数:https ://stackoverflow.com/a/5196220

step "Downloading cpanm installer"
 try `wget -q http://cpanmin.us -O $swrepo/cpanm.install`
next

step "Installing cpanm"
  try echo '{ exec </dev/tty; cat $swrepo/cpanm.install | perl - App::cpanminus; }' | bash
  # try bash -c "$(cat $swrepo/cpanm.install | perl - App::cpanminus)"
  # try cat $swrepo/cpanm.install | perl - App::cpanminus
next

step "Installing Perl module Nagios Config"
  try `cpanm Nagios::Config`
next

我的问题是:

  1. 无论我尝试以哪种方式运行 cpanminus 的安装,它都会使脚本失败,并且无法正确安装。我似乎无法使其在 step/try/next 功能之外发挥作用(不是我想要的。)

  2. cpanm 命令也失败了。如果我仅隔离并运行脚本的这一部分,它仍然会失败,并显示“找不到 cpanm 命令”。我可以在命令行手动运行它。

对稍微沮丧的人有任何指示吗?

更新

我将 cpanm 设置拉到一个单独的文件中:步骤“安装 cpanm”尝试 sh conf_cpanm.sh next

哪个有效,我可能会在以后尝试将其拉回,但到目前为止,它的功能。所以它可以留下来。

但是,对 try cpanm Nagios::Config 执行相同操作将不起作用。该文件如下所示:

#!/bin/bash
cpanm Nagios::Config

...如果我通过调用sh conf_nagcpanm.sh它来运行它就可以了。

4

1 回答 1

1

我认为使用反引号

try `cpanm Nagios::Config`

是一个错误。bash将采用反引号中的表达式,执行它,并将命令的输出替换为表达式。的输出cpanm不会是 shell 命令,所以这不起作用。它应该只是

try cpanm Nagios::Config
于 2015-07-09T00:52:43.820 回答