Sunwait - это двоичный файл, который будет ожидать астрономических событий перед выполнением данной команды.
После изучения вашего синтаксиса, я думаю, что это неверное толкование. В вашем примере sunwait
ничего не выполняется, на самом деле ему не дана команда. Я не знаком с этим sunwait
, но быстрое исследование показало мне, что оно просто ждет астрономическое событие и затем заканчивается.
В вашем случае это выглядит так:
- Оболочка читает строку, встречает точку с запятой
;
и выполняет все до этого момента - то естьsunwait
с ее параметрами командной строки. - Раковина ждет,
sunwait
чтобы закончить. - В конце концов
sunwait
завершается, поэтому оболочка переходит к нейmycommand
и выполняет ее в фоновом режиме из-за амперсанда&
.
Таким образом, прямой ответ на ваш вопрос является наиболее распространенным: он не «работает» (не делает то, что вы хотите), потому что он работает (делает то, что вы командуете).
Fix:
Или
{ /root/bin/sunwait sun up -0:00:00 54.453158N 11.013071E; mycommand; } &
или же
/root/bin/sunwait sun up -0:00:00 54.453158N 11.013071E && mycommand &
В первой строке две команды внутри {}
выглядят так, &
как будто это одна команда, поэтому все идет к фону. Просто и часто достаточно хорошо. Второй случай немного отличается: он mycommand
будет работать тогда и только тогда, когда завершится sunwait
без ошибок (если только sunwait
он плохо закодирован). Это поведение, которое вы ожидали в первую очередь, не так ли? Лично я нахожу второе исправление более элегантным. Представьте, что вы ошиблись, набрав текст, mycommand
и через некоторое время поняли, что это бомба замедленного действия. Убийство sunwait
вызовет бомбу в 1-м сценарии, обезвредит его во 2-м.