Sunwait ist eine Binärdatei, die auf astronomische Ereignisse wartet, bevor sie einen bestimmten Befehl ausführt.
Nachdem ich Ihre Syntax untersucht habe, denke ich, dass diese Interpretation falsch ist. In Ihrem Beispiel sunwait
wird nichts ausgeführt, tatsächlich wird kein Befehl gegeben. Ich kenne mich nicht aus sunwait
, aber die schnelle Forschung hat mir gezeigt, dass es nur auf astronomische Ereignisse wartet und dann endet.
In Ihrem Fall geht es so:
- Die Shell liest die Zeile, trifft auf ein Semikolon
;
und führt alles bis zu diesem Punkt aus - das ist diesunwait
Befehlszeile. - Die Schale wartet,
sunwait
bis sie fertig ist. - Schließlich
sunwait
endet die Shellmycommand
und führt sie aufgrund eines Et-Zeichens im Hintergrund aus&
.
Daher ist die direkte Antwort auf Ihre Frage am häufigsten: Sie arbeitet nicht (funktioniert nicht, was Sie wollen), weil sie funktioniert (was Sie befehlen).
Fix:
Entweder
{ /root/bin/sunwait sun up -0:00:00 54.453158N 11.013071E; mycommand; } &
oder
/root/bin/sunwait sun up -0:00:00 54.453158N 11.013071E && mycommand &
In der ersten Zeile erscheinen die beiden Befehle so {}
, &
als wäre es ein einzelner Befehl, sodass alles in den Hintergrund geht. Einfach und oft gut genug. Der zweite Fall ist etwas anders: mycommand
Wird nur dann ausgeführt, wenn er sunwait
ohne Fehler beendet wird (es sunwait
sei denn, er ist schlecht codiert). Es ist das Verhalten, das Sie eigentlich erwartet haben, nicht wahr? Persönlich finde ich den zweiten Fix eleganter. Stellen Sie sich vor, Sie machten einen Tippfehler mycommand
und erkannten nach einiger Zeit, dass es sich um eine tickende Bombe handelt. Beim Töten sunwait
wird die Bombe im ersten Szenario ausgelöst, im zweiten entschärft.