como executar mais de um programa em um único script?

0

Tenho cerca de 6 programas que quero executar um após o outro. Todos eles estão em diretórios diferentes com seus respectivos dados. Eu gostaria de ajuda com um script que eu possa usar para executar cada programa em uma ordem específica.

Isso ocorre porque a saída da execução anterior é a entrada da próxima execução.

    
por AiB 04.09.2013 / 01:24

3 respostas

4

Existem 2 maneiras de "encadear" programas juntos. Se você está tentando agrupá-los para que a saída do primeiro seja passada para o segundo, então você está procurando usar o que é chamado de pipe. O outro método simplesmente executa um programa após o outro.

exemplo de tubos

Aqui estamos pegando a saída do primeiro comando e passando por um pipe, ( | ) para um segundo comando.

$ echo "output from 1" | grep 1
output from 1

A saída está sendo exibida na tela pelo comando grep .

comandos no exemplo de série

Aqui estamos executando um comando seguido por outro.

Exemplo

#!/bin/bash

echo 1
echo 2

Coloque o acima em um arquivo chamado mycmds.bash , torne-o executável e execute-o:

$ chmod +x mycmds.bash
$ ./mycmds.bash
1
2

Você também pode fazer uso do subshells se quiser, para executar uma série de comandos no prompt, e capturar sua saída para um arquivo. Isso executará os comandos da mesma maneira que o método de script de shell acima.

Exemplo

apenas executando comandos

$ (echo 1; echo 2; echo 3)
1
2
3

capturando sua saída

$ (echo 1; echo 2; echo 3) | grep 3
3

capturando sua saída para um arquivo

$ (echo 1; echo 2; echo 3) | tee mycmds.log
1
2
3

$ cat mycmds.log 
1
2
3
    
por 04.09.2013 / 02:07
0

Você escreve o primeiro programa na primeira linha.

Você escreve o segundo programa na segunda linha.

E você repete.

    
por 04.09.2013 / 01:27
0

Sua pergunta é difícil de entender. Você está procurando por tubos ?

Se você escrever

program1 --option1 | program2 --option2

a saída do comando program1 --option1 é alimentada como entrada para o comando program2 --option2 .

Você pode encadear mais de dois programas dessa maneira. Você pode colocar uma nova linha após cada símbolo de pipe se a linha ficar muito longa.

pre-treatment file1.input file2.input file3.input |
some-processing --option=value --other-option |
more-processing |
analyze this --and that |
grep 'interesting stuff'    

Veja o que significa conectar STDOUT e STDIN? para uma explicação visual da metáfora do tubo.

    
por 04.09.2013 / 01:30