Você deve tentar
(sleep 5; ls) & echo "Now"
Isso funciona como você deseja.
Eu gostaria de executar vários comandos no bash, mas alguns deles foram executados em segundo plano. A melhor maneira de explicar isso é usando o seguinte comando que não funciona ...
for@barpc:~> (sleep 30;command1;command2 param ) & ; anotherCommand
Outros detalhes, se forem importantes:
Tudo o que você precisa fazer é remover o ;
. &
age como um separador de comandos sozinho, portanto, adicionar ;
depois disso é inválido.
(sleep 30; command1; command2 param ) & anotherCommand
(Os espaços após o ponto-e-vírgula não são necessários, apenas acho mais fácil ler dessa maneira. Esse é um dos poucos pontos em que os espaços são opcionais na sintaxe do shell - na maioria dos lugares, eles são obrigatórios ou proibidos. )
Quanto a melhores maneiras de fazer isso ... isso realmente depende exatamente do que você está tentando fazer. Precisamos de mais informações para fazer sugestões melhores.