쉘 스크립트에서 실행할 수 없는 명령 처리

쉘 스크립트에서 실행할 수 없는 명령 처리

저는 다음 과제를 받았습니다. *.tex 파일을 명령줄 인수로 사용하고 파일이 오류 없이 올바르게 실행되는지 확인하는 Bash 스크립트를 작성하는 것입니다. 오류나 경고 없이 실행되면 파일에 태그 2가 할당됩니다. (컴파일 중에 경고가 발생하면 1 표시, 오류가 표시되면 0 표시).

경고 없이 파일에 태그를 할당할 수도 있고 경고가 있는 파일에 태그를 할당할 수도 있습니다. 여기에 내 코드의 일부 줄이 나와 있습니다.

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

명령을 실행한 후 pdflatex내 스크립트는 "출력" 및 "경고"와 같은 적절한 단어를 검색하고 그에 따라 태그를 할당합니다. 그러나 파일에 오류가 있으면 pdflatex"x"를 입력한 경우에만 명령이 종료됩니다. 사용자가 "x"를 입력할 것으로 예상하므로 거기서 기다립니다. 스크립트를 실행하면 출력이 표시되지 않지만 x를 인쇄하면 파일에 태그 0이 할당됩니다.

하지만 이 프로그램을 자동 코드 평가기에 제공해야 합니다. 그러면 내 코드를 확인하고 모든 경우에 내 코드가 올바른지 알려줄 것입니다.

어떻게 해야 하나요?

답변1

대화형 입력을 기다리지 않도록 pdflatex에 지시합니다.

pdflatex -interaction nonstopmode "$1"

명령이 0이 아닌 상태( $?)를 반환하면 오류가 있으므로 0으로 표시됩니다. 그렇지 않은 경우 로그 파일(예 $1: 기존 확장자 대신 사용 .log)에 단어가 포함되어 있는지 테스트합니다 Warning. 그렇다면 1로 표시되고, 그렇지 않으면 0으로 표시됩니다.

답변2

일반적으로 쉘 스크립트에 사용자 입력을 읽으려고 하는 프로그램이 있는 경우 스크립트 상단에 다음을 추가하여 이를 방지할 수 있습니다.

exec < /dev/null

이는 스크립트가 키보드가 아닌 /dev/null에서 입력을 읽도록 지시합니다. 이 이후의 명령이 입력 읽기를 시도하면 즉시 파일 끝을 받게 됩니다.

관련 정보