executa scripts de shell de forma sequencial?

4

Eu tenho 4 scripts de shell e quero executá-los de forma sequencial:

script1 - > script2 - > script3 - > script4

em uma máquina local, posso garantir isso tornando os scripts executáveis e criando um novo script de shell como este:

#!/bin/bash
. script1.sh
. script2.sh
. script3.sh
. script4.sh

e se um dos scripts estiver em uma máquina remota (por exemplo, script2.sh), como posso:

  1. executar o script de shell remotamente
  2. garanta o sequenciamento.

Nota: todos os scripts possuem um loop infinito.

    
por Networker 21.05.2014 / 10:25

2 respostas

3

Eu suponho que você pode executar o script com: ./script1.sh (que inicia o script em um shell) em vez de . script1.sh (que os fornecerá em seu shell atual)?

Em caso afirmativo:

#!/bin/bash

./script1.sh   &&
{ ssh user@remote "cd /path/to/  && script2.sh" ; }  &&
./script3.sh   &&
./script4.sh

&& garanta que as seguintes instruções sejam executadas APENAS se o anterior retornou "0" (= "ok") (portanto, certifique-se de que seu script retorne o "0" correto se estiver OK, e alguma outra coisa inteiro, como "1"), se NÃO estiver OK.

(Observe que você pode ter && no final de uma linha, como eu fiz aqui, e o seguinte na próxima linha, sem a necessidade de \ a nova linha intermediária. "& ; "no final da linha avisa que a linha pode ser continuada na linha seguinte. [agradeço ao @Dennis por me corrigir: eu achei que também funcionou não colocar um '\ newline' quando" & & " estava na próxima linha, que é mais legível ... mas não funciona.Se você quiser "& &" na próxima linha, você precisa inverter a nova linha anterior])

    
por 21.05.2014 / 10:39
1

Se você puder ssh para a máquina remota e os scripts já estiverem na máquina remota, no subdiretório test da sua conta, você poderá fazer isso:

#!/bin/bash
. script1.sh
ssh your_name@remote_machine "cd test; . script2.sh"
. script3.sh
. script4.sh

o script aguardará o retorno do comando remoto antes de pesquisar script3.sh

Se o script ainda não estiver lá, ou mudar regularmente, você pode usar scp para copiá-lo para o local conhecido primeiro (supondo que você tenha feito test uma vez):

#!/bin/bash
. script1.sh
scp script2.sh your_name@remote_machine:~/test/
ssh your_name@remote_machine "cd test; . script2.sh"
. script3.sh
. script4.sh

E se script2.sh criar alguma saída em um arquivo, é claro que você pode copiá-lo depois que o ssh terminar.

    
por 21.05.2014 / 10:34

Tags