Como executar vários comandos no Bash, alguns em segundo plano

Como executar vários comandos no Bash, alguns em segundo plano

Eu gostaria de executar vários comandos no bash, mas alguns deles serão 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

Acho que isso pode ser interpretado como duas perguntas:

  1. Como encerrar o & em um comando?
  2. Qual seria a melhor maneira de fazer isso?

Outros detalhes, se forem importantes:

  • Opensuse 13.2
  • concha de gnomo

Responder1

Você deveria tentar

(sleep 5; ls) &  echo "Now"

Isso funciona como você deseja.

Responder2

Tudo que você precisa fazer é remover o ;. &atua como um separador de comandos por si só, 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 desta forma. Este é um dos poucos locais onde os espaços são opcionais na sintaxe do shell - na maioria dos lugares, eles são obrigatórios ou proibidos.)

Quanto às melhores maneiras de fazer isso... isso realmente depende exatamente do que você está tentando fazer. Precisaríamos de mais informações para fazer sugestões melhores.

informação relacionada