Bash – como executar um comando após o anterior terminado? [duplicar]

Esta pergunta já tem respostas aqui :

Comentários

  • terdon ' s resposta abaixo é excelente, mas você pode eliminar os pontos-e-vírgulas na versão que ' ve mostrado acima, assim como os comandos são executados em ordem no script, cada um em sua própria linha. O ponto e vírgula é redundante a menos que você coloque todos os comandos em uma linha.

Resposta

Sim, você está fazendo da maneira certa. Os scripts de shell executarão cada comando sequencialmente, esperando que o primeiro termine antes que o próximo comece. Você pode juntar os comandos com ; ou colocá-los em linhas separadas :

command1; command2 

ou

command1 command2 

Não há necessidade de ; se os comandos estiverem em linhas separadas. Você também pode escolher executar o segundo comando apenas se o primeiro tiver sido encerrado com sucesso. Para fazer isso, junte-os com && :

command1 && command2 

ou

command1 && command2 

Para obter mais informações sobre os vários operadores de controle disponíveis para você, veja aqui .

Comentários

  • Lembre-se disso em vez de &&, OP poderia simplesmente adicionar set -e no início do script. Claro, este não é um operador de encadeamento de processo.
  • @didierc que fará com que o script saia em qualquer erro e também produzirá muitos relatórios de progresso desnecessários. Não é o mesmo que vincular dois comandos específicos com &&.
  • @polemon não realmente, não. Esta é uma pergunta muito simples feita por um usuário novato. Não ' não vejo muito sentido em adicionar muitos detalhes. Observe que eu não ' nem mencionei ||. Eu não ' não vejo por que wait é relevante aqui, certamente não é necessário para a tarefa simples de executar um comando após o outro. Ele só seria necessário para um controle mais refinado dos processos. Sinta-se à vontade para enviar uma resposta, é claro, mas eu ' prefiro manter a minha simples.
  • @terdon wouldn ' que seja set -v ou set -x em vez de set -e?
  • @didierc veja meu comentário acima, eu estava pensando em set -x, desculpe.

Resposta

Em um caso repetitivo como este, recomendo usar um loop for .

 for P in {1..3} ; do wget -q http://exemple.com/page${P}.php ; done  

Esta é uma versão de uma linha adequada para a linha de comando, mas também pode ser usada em um script. As chaves em torno do nome da variável são necessárias ao incorporar uma variável em uma string sem espaços em branco.

O loop não apenas envia as solicitações em ordem, mas é mais fácil de ajustar e reutilizar quando necessário, sem muitas preocupações com erros de digitação.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *