3

I am given an assignment like this: Write a Bash script that takes a *.tex file as command-line argument and checks if the file executes correctly without any errors. If it executes without any error and warning, assign a mark of 2 to that file. (1 mark if it compiled with a warning, and 0 marks if it shows an error).

I am able to assign marks for files which executed without any warnings and for files which gave a warning. Here, I am giving some of the lines of my code,

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

After executing the command pdflatex, my script searches for appropriate words like "output" and "warning", and accordingly assigns marks. But in the case of a file which has errors, the pdflatex command exits only if we give a 'x'. Since it is expecting an 'x' from the user, it waits there. If I run the script, it is not showing any output; but if I print an x, it assigns the mark to that file as zero.

But I have to give this program to an automatic code-evaluator which checks for my code, and tells if my code is correct for all the cases...

How do I accomplish that?

  • 5
    Workaround: tell pdflatex to behave, using -interaction nonstopmode. – Stéphane Gimenez Dec 1 '11 at 14:32
1

Tell pdflatex not to wait for any interactive input ever:

pdflatex -interaction nonstopmode "$1"

If the command returns a nonzero status ($?), there was an error, so the mark is 0. Otherwise, test whether the log file (like $1, but with .log instead of the extension that's there already) contains the word Warning; if it does, the mark is 1, otherwise the mark is 0.

1

In the general case, if you have a program in a shell script that tries to read input from the user, you can stop that by adding this at the top of your script:

exec < /dev/null

This tells the script to read input from /dev/null instead of from the keyboard. If any command after that tries to read input, it will immediately receive end-of-file.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.