Bash-Skript kann anderes Skript nicht ohne Fehler aufrufen

Bash-Skript kann anderes Skript nicht ohne Fehler aufrufen

Ich habe ein Bash-Skript, das beim Hochfahren von einem init.d-Skript aufgerufen wird. Ich muss für dieses Skript mehrere Neustarts durchführen, also erstelle ich eine Zwischendatei, mit der überprüft wird, ob das Skript funktionieren sollte oder nicht. Mein Problem ist, dass in dem Skript, das von einem init.d-Skript aufgerufen wird (ich bin ziemlich neu bei Bash, also bin ich mir nicht sicher, ob das technisch gesehen ein Skript ist), dieses „Skript“ ein anderes Skript aufruft, das meine eigentliche Arbeit erledigt, aber nie ausgeführt wird und keinen Fehler erzeugt. Es ist checkversion.sh arg1 arg2. Ich habe die stderr-Ausgabe in eine Datei weitergeleitet, die nie einen Fehler erzeugt. Es passiert, wenn ich absichtlich einen falschen Dateipfad eingebe. Sie können sehen, dass ich nach dem Aufruf des Skripts einige Ausgabedateien verwende und diese korrekt ausgefüllt werden, sodass es Zugriff erhält. Übersehe ich etwas Offensichtliches?

Grundstruktur: /etc/init.d/myupdate ruft /usr/bin/databases/runcheckversion.sh auf, das schließlich /usr/bin/databases/checkversion.sh aufruft, aber checkversion.sh wird nie ausgeführt und es werden keine Fehler ausgegeben. Denken Sie, es könnte mit einer PATH-Spezifikation zu tun haben?

/etc/init.d/myupdate-Code:

#! /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-Code:

#! /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

Antwort1

Die Datei, deren Vorhandensein Sie vor dem Aufruf der Funktion after_reboot() überprüfen, ist: /usr/bin/databases/afterreboot.txt

Die Datei, in die Sie 1 echoen (falls die obige Datei nicht existiert), ist jedoch: /usr/bin/afterreboot.txt

Es sieht also so aus, als ob Sie eine Datei erstellen (in /usr/bin) und nach einer anderen suchen (in /usr/bin/databases).

Folgendes könnte funktionieren:

#! /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

verwandte Informationen