![execute o script bash de outro script e redirecione sua saída](https://rvso.com/image/1047584/execute%20o%20script%20bash%20de%20outro%20script%20e%20redirecione%20sua%20sa%C3%ADda.png)
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:
- ELABORATO.SH aguarda na entrada como parâmetro alguns valores;
- ELABORATO.SH aguarda entrada do stdin, do teclado;
- ELABORATO.SH escreve a saída em um arquivo/fifo/etc.. ;
Primeiro, um ponto é muito simples de resolver... na verdade, no meu TEST.SH eu chamo
ELABORATO.SH
desta forma:. ELABORATO.SH param1 param2 param3;
Segundo e terceiro É mais complexo para mim..
Eu tenho que ler uma string de um arquivo (e está tudo bem) e passar essa string
ELABORATO.SH
como a string era do stdin.Eu tenho que criar um arquivo com a saída de
ELABORATO.SH
... então por exemplo, seELABORATO.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 Eu faço?
Responder1
Isso soa suspeitamente como uma tarefa de casa*, mas vamos lá.
Por que você forneceria o
ELABORATO.SH
script? Se você fizer isso e houver umaexit
declaração ou erros, vocêTEST.SH
fará o mesmo. Eu não acho que é isso que você quer. Eu apenas executaria o script:bash ELABORATO.SH param1 param2
Você pensou em redirecionar sua entrada?
bash ELABORATO.SH param1 param2 < INPUT_FILE
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.SH
sã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.