Como integrar vários scripts Python / Perl para serem executados em um script bash?

1

Eu tenho os seguintes scripts Perl (embora isso se aplique ao Python e a outras linguagens de script): script1.pl , script2.pl , script3.pl

A maneira como esses scripts são escritos, os usuários os executam com sinalizadores de entrada e a saída é um arquivo salvo.

perl script1.pl --i input1.tsv   ## this outputs the file 'outputs1'
perl script2.pl --i outputs1     ## this outputs the file 'outputs2'
perl script3.pl --i outputs2     ## this outputs the file 'final_output'

Agora, gostaria de criar um script bash executável que permita aos usuários simplesmente trabalhar com input1 e obter a saída em retorno final_output .

Veja como eu faria isso com apenas um script perl, execute.sh :

#!/bin/sh

source ~/.bash_profile

FLAG1="--i=$1"

perl script1.pl $FLAG1

que pode ser executado na linha de comando execute.sh input1.tsv

Para o meu exemplo com três scripts, como eu enviaria as saídas intermediárias para os scripts intermediários para criar um script execute.sh , por exemplo? outputs1 para script2.pl , depois outputs2 para scripts3.pl , etc.?

Não há uma maneira de fazer isso sem reescrever os scripts perl / python?

    
por ShanZhengYang 31.01.2017 / 00:57

2 respostas

1

As 3 linhas que você escreveu para demonstrar o que você quer são um script bash válido: um script nada mais é do que uma seqüência de comandos executados um após o outro por um shell.

O único código adicional que você pode desejar seria algo para limpar os arquivos temporários produzidos por script1.pl e script2.pl . Além disso, talvez você queira usar caminhos absolutos para especificar onde script{1,2,3}.pl ao vivo.

#!/bin/sh
trap 'rm outputs1 outputs2' EXIT

perl script1.pl --i "$1"
perl script2.pl --i outputs1
perl script3.pl --i outputs2

$1 representa o valor do primeiro argumento passado para o script, por isso seria chamado com

execute.sh input1.tsv

conforme desejado.

Você não pode realmente configurar canais entre os três scripts, porque eles parecem estar codificados para produzir arquivos de saída específicos.

    
por 31.01.2017 / 21:38
1

Supondo que os arquivos de saída são criados localmente, isto é. no diretório onde o script está localizado, você pode tentar executar os scripts em um diretório de trabalho temporário, para o qual você pode copiar os scripts antes de executá-los e no qual nenhum outro processo criará arquivos. Então você poderá controlar e operar os novos arquivos criados por scripts específicos.

Você pode criar o diretório temporário em /tmp ou seu diretório de usuários ativo. Adicione ao final do seu script um comando que irá derrubar o diretório. Se você quiser que quaisquer arquivos de saída sejam salvos em outro lugar, você pode copiá-los no momento certo para o lugar certo.

    
por 04.02.2017 / 17:54