Sunwait is a binary that will wait for astronomical events to happen before executing a given command.
Depois de examinar sua sintaxe, acho que essa interpretação está errada. No seu exemplo, sunwait não executa nada, na verdade, não há nenhum comando dado a ele. Eu não estou familiarizado com sunwait , mas uma pesquisa rápida revelou-me que apenas espera por um evento astronómico e depois termina.
No seu caso, é assim:
- O shell lê a linha, encontra o semicolon
;e executa tudo nesse ponto - ou seja, osunwaitcom suas opções de linha de comando. - O shell aguarda que
sunwaittermine. - Por fim,
sunwaittermina, portanto, o shell prossegue paramycommande o executa em segundo plano devido ao e comercial&.
Portanto, a resposta direta à sua pergunta é mais comum: ela não está "funcionando" (não fazendo o que você quer) porque está funcionando (fazendo o que você comanda).
Corrigir:
-
{ /root/bin/sunwait sun up -0:00:00 54.453158N 11.013071E; mycommand; } & -
ou
/root/bin/sunwait sun up -0:00:00 54.453158N 11.013071E && mycommand &
Na primeira linha, os dois comandos dentro de {} aparecem para & como se fosse um único comando, então tudo vai para o segundo plano. Simples e muitas vezes bom o suficiente. O segundo caso é um pouco diferente: mycommand será executado se e somente se sunwait terminar sem erro (a menos que sunwait seja mal codificado). É o comportamento que você esperava em primeiro lugar, não é? Pessoalmente, acho a segunda correção mais elegante. Imagine que você cometeu um erro ao digitar mycommand e percebeu depois de um tempo que é uma bomba-relógio. Matar sunwait irá acionar a bomba no 1º cenário, desativá-la no 2º.