execute o script bash de outro script e redirecione sua saída

execute o script bash de outro script e redirecione sua saída

Olá a todos, tenho que fazer um programa. Serei muito conciso para explicar... E o que já fiz e o que tenho que fazer...

Simplesmente, tenho que fazer um "simulador" no Bash que execute os exercícios dos alunos e verifique se estão corretos... para cada exercício tenho que calcular uma nota e dizer se o aluno passou ou não no exame...

Já fiz quase tudo... acho que falta apenas uma linha de código para escrever.. mas acho que 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 entrada do stdin, do teclado;
  3. ELABORATO.SH escreve a saída em um arquivo/fifo/etc.. ;

  1. Primeiro, um ponto é muito simples de resolver... na verdade, no meu TEST.SH eu chamo ELABORATO.SHdesta forma:

    . ELABORATO.SH param1 param2 param3;
    

    Segundo e terceiro É mais complexo para mim..

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

  3. Eu tenho que criar um arquivo com a saída de ELABORATO.SH... então por exemplo, se ELABORATO.SHproduzir 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 Eu faço?

Responder1

Isso soa suspeitamente como uma tarefa de casa*, mas vamos lá.

  1. Por que você forneceria o ELABORATO.SHscript? Se você fizer isso e houver uma exitdeclaração ou erros, você TEST.SHfará 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 apenasfeitopor isso?

    bash ELABORATO.SH param1 param2 < INPUT_FILE > OUTPUT_FILE
    

Descobrir quais arquivos ELABORATO.SHsão gravados não é trivial. (Linha lateral: se você não conhece seus arquivos de saída, então como eles poderiam ser relevantes para calcular a pontuação de ELABORATO.SH? Por que se preocupar 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  

Então, para movê-los para outro lugar, você poderia 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 amigáveis ​​do AskUbuntu ao seu supervisor.

informação relacionada