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, osunwait
com suas opções de linha de comando. - O shell aguarda que
sunwait
termine. - Por fim,
sunwait
termina, portanto, o shell prossegue paramycommand
e 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º.