Führen Sie zwei Befehle nacheinander mit crontab aus

Führen Sie zwei Befehle nacheinander mit crontab aus

Meine 3-jährige Tochter liebtSuperTux. Sie kann die Maus nicht steuern, daher sollte das Spiel beim Start automatisch ausgeführt werden. Nach dem Spiel sollte der Computer automatisch heruntergefahren werden.

Wenn ich jedoch den folgenden Befehl in "crontab -e":

@reboot env DISPLAY=:0.0 /usr/games/supertux2 && echo "PASSWORD" | sudo -S shutdown -h now

Der erste Teil führt das Spiel beim Booten auf einem alten PC aus. Ich habe erwartet, dass der zweite Teil des Befehls den Computer ausschaltet, wenn mein Mädchen das Spiel beendet, aber das funktioniert nicht.

Bedeutet der Kettenbefehl nicht, A && Bdass B gestartet wird, wenn A fertig ist?

Wie kann ich das Ausschalten des Computers automatisieren, wenn das Spiel geschlossen wird?

Antwort1

Technisch gesehen A && Bwird B nur ausgeführt, wenn A erfolgreich ist (mit dem Status EXIT_SUCCESS, also 0, beendet wird). Ebenso A || Bwird B nur ausgeführt, wenn A fehlschlägt. Eine andere Option könnte sein, A; Bdass B unabhängig vom Beendigungsstatus von A ausgeführt werden soll, aber erst, wenn A abgeschlossen ist. Ich weiß nicht, wie das Spiel derzeit beendet wird, aber wenn es nicht mit dem Status EXIT_SUCCESS beendet wird, wird B nicht ausgeführt.

Um dies zu testen, können Sie die folgenden Befehle ausführen und sehen, welche die Zeichenfolge generieren:

perl -e 'exit 0' && echo "exit was successful"
perl -e 'exit 0' || echo "exit was successful"
perl -e 'exit 0'; echo "exit was successful"
perl -e 'exit 1' && echo "exit was failure"
perl -e 'exit 1' || echo "exit was failure"
perl -e 'exit 1'; echo "exit was failure"

Schließlich könnten Sie ein Shell-Skript /usr/games/supertux2.sh erstellen:

#!/bin/sh
/usr/games/supertux2
echo "PASSWORD" | sudo -S shutdown -h now

Und rufen Sie das dann beim Neustart auf, anstatt /usr/games/supertux2

verwandte Informationen