Como enviar muitos comandos para shell e esperar o comando por trás termina [fechado]

13

Eu tenho cerca de 20 comandos e tenho que enviar tudo isso para o shell do Unix e copiar o resultado, mas não sei como fazer isso.

Não tenho certeza sobre qual shell eu tenho, porque é um pequeno programa conectado ao Mobile Network Managment, e com este pequeno programa temos acesso para enviar comandos por linha e receber os resultados pelo grito, por isso não consigo use scripts para enviar os comandos.

Comando 1 - Conecte-se a um servidor.

Espere até que o comando 1 termine

Comando 2 - Atualiza todas as informações do servidor 1 terminar

Espere.

Comando 3 . Obtenha algum parâmetro.

... e mais tais comandos.

Eu tentei com cmd1 | cmd2 | cmd3 e cmd1 & cmd2 & cmd3 e cmd1;cmd2

O problema é que cmd1 está conectado a um RNC (elemento Network) e leva 15 segundos em ar, depois disso cmd2 tem sentido. mas apenas trabalhe para o primeiro cmd. Alguma pista, como executar isso?

    
por Jonathan Raul Tapia Lopez 04.02.2013 / 13:57

4 respostas

16

Normalmente, apenas cmd1;cmd2;cmd3;cmd4 (se você quisesse escrevê-lo em uma linha), ou usando cmd1 && cmd2 && cmd3 && cmd4 se você não quer rodar o cmd3 quando o cmd2 falha.

Como alternativa a ; , você pode escrever apenas um comando por linha.

cmd1
cmd2
cmd3
cmd4

Se você deseja que os comandos sejam executados em paralelo no plano de fundo, você também pode usar

cmd1 &
cmd2 &
cmd3 &
cmd4 &
wait # for cmd1-4 to finish

Qualquer um desses métodos também pode ser colocado em um script de shell. Há pouca diferença entre o que você escreve em um shell script e o que você escreve no próprio shell.

    
por 04.02.2013 / 14:53
2

Você pode querer olhar para sleep , se seu ambiente permitir. A seqüência completa seria então algo como cmd1 && sleep 10s && cmd2 .
Aqui está a página de manual relevante para dormir .

    
por 27.01.2014 / 13:04
1

Use apenas um script, um arquivo contendo os comandos para executar um após o outro, como:

#!/bin/sh

command-01
command-02
...
command-20

A primeira linha (shebang) diz para executar os seguintes comandos usando /bin/sh , tornar o arquivo executável ( chmod u+x your-little-script ), então você pode executá-lo por ./my-little-script . Desta forma, você não vai sair um pouco para fora; -)

Leia o manual do shell, ele fornece uma linguagem de programação completa. Confira bash(1) se é isso que está disponível, ou então o shell Korn ksh(1) . Eles oferecem muitos recursos úteis para controlar o fluxo de controle em scripts (ou interativamente, para esse assunto).

Espero que isso ajude.

    
por 04.02.2013 / 14:09
-1

Você pode executar algo como expect em seu computador local para enviar cmd1 e esperar que termine antes de emitir cmd2 etc. Você precisa descobrir um período razoável para aguardar ou uma saída específica que indique que o comando é feito, a fim de escrever um script Expect adequado.

É claro que cmd1; cmd2; cmd3; cmd4 em um comando executará os comandos em sequência, um após o outro.

    
por 04.02.2013 / 20:24