lidando com comandos un-executable dentro de um shell-script

3

Eu recebo uma tarefa como esta: Escreva um script Bash que tenha um arquivo * .tex como argumento de linha de comando e verifique se o arquivo é executado corretamente sem erros. Se ele for executado sem nenhum erro e aviso, atribua uma marca de 2 a esse arquivo. (1 marca se compilado com um aviso e 0 marca se mostrar um erro).

Eu posso atribuir marcas para arquivos que foram executados sem nenhum aviso e para arquivos que deram um aviso. Aqui, eu estou dando algumas das linhas do meu código,

#!/bin/bash
rm t.txt
pdflatex $1 >> t.txt
message='tail -2 t.txt|grep -i "output"|cut -c 1-6'

Depois de executar o comando pdflatex , meu script procura palavras apropriadas como "saída" e "aviso" e, consequentemente, atribui marcas. Mas, no caso de um arquivo com erros, o comando pdflatex só será exibido se dermos um 'x'. Como está esperando um 'x' do usuário, ele espera lá. Se eu executar o script, ele não mostrará nenhuma saída; mas se eu imprimir um x, ele atribui a marca a esse arquivo como zero.

Mas eu tenho que dar este programa para um avaliador de código automático que verifica o meu código, e diz se o meu código está correto para todos os casos ...

Como faço isso?

    
por Ruby 01.12.2011 / 15:17

2 respostas

1

Diga ao pdflatex para não esperar por nenhuma entrada interativa:

pdflatex -interaction nonstopmode "$1"

Se o comando retornar um status diferente de zero ( $? ), houve um erro, então a marca é 0. Caso contrário, teste se o arquivo de log (como $1 , mas com .log em vez da extensão já existe) contém a palavra Warning ; se isso acontecer, a marca é 1, caso contrário, a marca é 0.

    
por 02.12.2011 / 02:29
1

No caso geral, se você tiver um programa em um script de shell que tente ler a entrada do usuário, é possível pará-lo adicionando isso na parte superior do script:

exec < /dev/null

Isto diz ao script para ler a entrada de / dev / null em vez do teclado. Se algum comando depois disso tentar ler a entrada, ele receberá imediatamente o fim do arquivo.

    
por 02.12.2011 / 21:59