Bash 脚本无法正常调用其他脚本

Bash 脚本无法正常调用其他脚本

我有一个 bash 脚本,在启动时从 init.d 脚本调用。我需要为此脚本进行多次重新启动,因此我正在创建一个中间文件,用于检查脚本是否应该工作。我的问题是,在 init.d 脚本(对 bash 来说有点新,所以我不确定这在技术上是否称为脚本)调用的脚本中,“脚本”调用另一个执行我实际工作的脚本,但它永远不会运行并且不会产生错误。它是 checkversion.sh arg1 arg2。我已将 stderr 输出通过管道传输到一个永远不会出现错误的文件。如果我故意放入错误的文件路径,就会出现这种情况。您可以看到我在调用脚本后使用了一些输出文件,并且这些文件已正确填充,因此可以访问。我错过了一些明显的东西吗?

基本结构: /etc/init.d/myupdate 调用 /usr/bin/databases/runcheckversion.sh 最终调用 /usr/bin/databases/checkversion.sh 但 checkversion.sh 永远不会被执行,也不会输出任何错误。认为这可能与 PATH 规范有关?

/etc/init.d/myupdate 代码:

#! /bin/sh
### BEGIN INIT INFO
#Provides: myupdate
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin

case "$1" in
    start)
         /usr/bin/databases/runcheckversionwithupdate.sh
         ;;
    stop|restart|reload)
         ;;
esac

/usr/bin/databases/runcheckversion.sh 代码:

#! /bin/sh

after_reboot()
{
   versionNumber=$(< /usr/bin/databases/afterreboot.txt);
   #This following command never executes and theres no error output
   sudo /usr/bin/databases/checkversion.sh $versionNumber /usr/bin/databases/my.db.sqlite 2> didntwork.txt 
  ((versionNumber++));
  echo $versionNumber>/usr/bin/databases/afterreboot.txt;  
}




if [ -f /usr/bin/databases/afterreboot.txt ]; then
    sleep 20
    after_reboot
    checkVersion=$(< /usr/bin/databases/afterreboot.txt)
    if(($checkVersion < 2)); then
    sudo reboot
    fi
    echo "DONE"
else
  echo "1">/usr/bin/afterreboot.txt;
  echo "worked"
  sudo reboot
fi

答案1

在调用 after_reboot() 函数之前检查是否存在的文件是: /usr/bin/databases/afterreboot.txt

但是,您要回显 1 的文件(如果上述文件不存在)是:/usr/bin/afterreboot.txt

因此,看起来您正在创建一个文件(在 /usr/bin 中)并检查另一个文件(在 /usr/bin/databases 中)。

以下方法可能有效:

#! /bin/sh

after_reboot()
{
   versionNumber=$(< /usr/bin/databases/afterreboot.txt);
   #This following command never executes and theres no error output
   sudo /usr/bin/databases/checkversion.sh $versionNumber /usr/bin/databases/my.db.sqlite 2> didntwork.txt 
  ((versionNumber++));
  echo $versionNumber>/usr/bin/databases/afterreboot.txt;  
}




if [ -f /usr/bin/databases/afterreboot.txt ]; then
    sleep 20
    after_reboot
    checkVersion=$(< /usr/bin/databases/afterreboot.txt)
    if(($checkVersion < 2)); then
    sudo reboot
    fi
    echo "DONE"
else
  echo "1">/usr/bin/databases/afterreboot.txt;
  echo "worked"
  sudo reboot
fi

相关内容