在bash脚本中安装cpanm

时间:2015-07-08 23:13:27

标签: bash perl cpanm

我正在编写一个脚本,根据我的要求安装和配置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命令”。我可以在命令行手动运行它。

  3. 有点沮丧的指针?

    更新

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

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

    然而,做同样的事情     尝试cpanm Nagios :: Config 不行。该文件如下所示:

    #!/bin/bash
    cpanm Nagios::Config
    

    ...如果我通过调用sh conf_nagcpanm.sh来运行它,它可以正常工作。

1 个答案:

答案 0 :(得分:1)

我认为使用反引号

try `cpanm Nagios::Config`

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

try cpanm Nagios::Config