我正在编写一个脚本,根据我的要求安装和配置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
我的问题是:
无论我尝试为cpanminus运行安装,它都会使脚本失败,并且无法正常安装。我似乎无法使其在step / try / next函数之外运行(不是我想要它。)
cpanm命令也失败了。如果我隔离并仅运行脚本的这一部分,它仍然会失败,并且“找不到cpanm命令”。我可以在命令行手动运行它。
有点沮丧的指针?
更新
我将cpanm设置拉出到一个单独的文件中: 步骤“安装cpanm” 试试sh conf_cpanm.sh 下
哪个有效,我可能会尝试将其拉回来,但到目前为止还有功能。所以它可以留下来。
然而,做同样的事情 尝试cpanm Nagios :: Config 不行。该文件如下所示:
#!/bin/bash
cpanm Nagios::Config
...如果我通过调用sh conf_nagcpanm.sh
来运行它,它可以正常工作。
答案 0 :(得分:1)
我认为使用反引号
try `cpanm Nagios::Config`
是个错误。 bash
将在反引号中使用表达式,执行它,并将命令的输出替换为表达式。 cpanm
的输出不会是shell命令,所以这不起作用。它应该只是
try cpanm Nagios::Config