【问题标题】:Calling a perl script from bash/shell script从 bash/shell 脚本调用 perl 脚本
【发布时间】:2014-06-05 16:53:38
【问题描述】:

我正在尝试调用位于不同目录中的 perl 脚本(来自 shell 脚本),具体取决于在 cron 中调用它的环境:

#!/bin/bash
# triggerCron.sh - set different environments, set path to perl scripts, calls script

TMP_HOME=/home/localweb/htdocs/cgi-bin/user1/localroot

if [ "$1" = "dev" ] || [ "$1" = "uat" ] || [ "$1" = "prd" ]
then
echo "Calling $1 OBTriggerCron.pl"
export PATH=$TMP_HOME/$1:$PATH
echo $PATH
./OBTriggerCron.pl
echo "Complete."
else
    echo "Val Not Set: $1"
fi

我的想法是我可以先导出路径,然后调用脚本......然后有一个看起来像这样的 crontab:

30 4 * * * /usr/bin/triggerCron.sh dev
30 4 * * * /usr/bin/triggerCron.sh uat
30 4 * * * /usr/bin/triggerCron.sh prd

但是当我运行它时,我得到:

bash-3.00$ triggerCron.sh dev
Calling dev OBTriggerCron.pl
/home/localweb/htdocs/cgi-bin/user1/localroot/dev:/home/localweb/htdocs/cgi-bin/user1/localroot/dev:/home/localweb/htdocs/cgi-bin/user1/localroot/dev:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/ufs/00/home/user1/bin:/ufs/00/home/user1/mysql-tools:/home/ICoracle/bin
Can't open perl script "OBTriggerCron.pl": No such file or directory

基本上,我正在尝试临时设置路径,调用脚本并退出...但到目前为止,没有运气...是的,每个目录中都有 OBTRiggerCron.pl 脚本的副本。

感谢您的帮助。

【问题讨论】:

  • 在你的脚本中运行pwd来显示它当前的工作目录,它可能不是你所期望的。

标签: perl shell cron


【解决方案1】:

代替

./OBTriggerCron.pl

做:

$TMP_HOME/$1/OBTriggerCron.pl

在这种情况下不需要导出 PATH。

【讨论】:

    【解决方案2】:
    ./OBTriggerCron.pl
    

    表示在当前目录执行OBTriggerCron.pl。你需要

    OBTriggerCron.pl
    

    它将在 PATH 中查找。

    【讨论】:

      【解决方案3】:

      感谢您的帮助!两个答案都有帮助,但最大的帮助是 Lee Duhem ......我正在调用设置文件(yml),我**需要确保我在正确的导演中**y ...所以我接受了每个人的建议,现在看起来像这样:

      TMP_HOME=/home/localweb/htdocs/cgi-bin/user1/localroot
      
      if [ "$1" = "dev" ] || [ "$1" = "uat" ] || [ "$1" = "prd" ]
      then
      echo "Calling $1 OBTriggerCron.pl"
      cd $TMP_HOME/$1
      OBTriggerCron.pl
      echo "Complete."
      else
      echo "Val Not Set: $1"
      fi
      

      它有效!谢谢大家!

      【讨论】: