O erro de sintaxe é porque ambos &
e &&
são separadores de comandos. &
inicia o comando em segundo plano e imediatamente executa o próximo, enquanto &&
executa o primeiro comando, aguarda que ele termine e executa o segundo comando se o primeiro for bem-sucedido.
Para contextualizar duas coisas que você deseja executar de forma assíncrona a uma terceira coisa, use este padrão:
( first_thing && second_thing ) &
third_thing
Opcionalmente wait $!
após third_thing
para concluir os dois primeiros antes de continuar.
wait 1
espera que o PID 1 termine, o que é improvável que aconteça enquanto o shell está em execução. Você vai querer wait %1
, que espera por especificação de trabalho 1.