executa o script bash de outro script e redireciona sua saída

0

Olá a todos que eu tenho que fazer um programa .. Eu vou ser muito conciso para explicar isso ... E o chapéu que eu já fiz e o que eu tenho que fazer ...

Simplesmente, eu tenho que fazer um "simulador" no Bash que executa exercícios de estudantes e verificar se eles estão corretos ... para cada exercício eu tenho que calcular uma pontuação e dizer se o aluno passou no exame ou não .. .

Eu fiz quase tudo ... Eu acho que sinto falta apenas de uma linha de código para escrever ... mas eu acho que eles são os mais importantes também ...: (

Meu script é TEST.SH e devo executar o exercício do aluno .. o exercício é um script ELABORATO.SH ... Agora, posso ter alguns cenários:

  1. ELABORATO.SH aguarda na entrada como parâmetro alguns valores;
  2. ELABORATO.SH aguarda na entrada do stdin, do teclado;
  3. ELABORATO.SH grava a saída em um arquivo / fifo / etc ..;
  1. Primeiro, um ponto é realmente simples de resolver ... no meu TEST.SH eu chamo ELABORATO.SH desta forma:

    . ELABORATO.SH param1 param2 param3;
    

    Segundo e terceiro É mais complexo para mim ..

  2. Eu tenho que ler a partir de um arquivo uma string (e está tudo bem) e passar essa string para ELABORATO.SH como a string era de stdin.

  3. Eu tenho que criar um arquivo com a saída de ELABORATO.SH ... então por exemplo, se ELABORATO.SH produzir um arquivo (não sei o nome do arquivo de saída) eu tenho que produzir um arquivo também, em outro diretório ... Como posso fazer?

por Ciccio 26.08.2014 / 11:57

1 resposta

2

Isso soa suspeitamente como uma lição de casa *, mas aqui vamos nós.

  1. Por que você criaria o script ELABORATO.SH ? Se você fizer isso e tiver uma instrução exit ou erros, seu TEST.SH fará o mesmo. Eu não acho que é isso que você quer. Eu apenas executaria o script:

    bash ELABORATO.SH param1 param2
    
  2. Você pensou em redirecionar sua entrada?

    bash ELABORATO.SH param1 param2 < INPUT_FILE
    
  3. Para capturar a saída de ELABORATO.SH , bem, o redirecionamento não parece ser feito para isso?

    bash ELABORATO.SH param1 param2 < INPUT_FILE > OUTPUT_FILE
    

Descobrir quais arquivos ELABORATO.SH gravam não é trivial. (Sideline: se você não conhece seus arquivos de saída, como eles podem ser relevantes para calcular a pontuação de ELABORATO.SH ? Por que se incomodar em movê-los?)

De qualquer forma, aqui vamos nós. O pipeline a seguir lista os arquivos criados por ELABORATO.SH :

strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE \
    | grep '^open(.*O_CREAT' | cut -d\" -f 2  

Depois, mova-os para outro lugar que você possa fazer:

for f in $(
    strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE 
       | grep '^open(.*O_CREAT' | cut -d\" -f 2) 
do
    mv "$f" /path/to/elsewhere
done

*) Por favor, recomende as pessoas amigas do AskUbuntu ao seu supervisor.

    
por zwets 26.08.2014 / 12:58