실행이 중지된 위치에서 쉘 스크립트 실행 [닫기]

실행이 중지된 위치에서 쉘 스크립트 실행 [닫기]

나는 명령이 포함된 파일의 각 줄을 읽고 하나씩 실행하며 명령이 실패하면 중지하는 bash 스크립트를 작성했습니다.

while read -r line
do
$line || exit 1
done< /root/ansi-pb/sample.txt

Sample.txt에는 다음 명령이 있습니다.

echo "hello world"
free -m
mvn -version
date
echo "bye"

이 스크립트를 즉석에서 작성하여 실패한 명령이 발생하면 텍스트 파일에서 수정하고 스크립트를 다시 실행할 때 처음부터 시작하는 대신 실패한 명령부터 시작해야 합니다.

어떻게 해야 하나요?

답변1

#!/bin/bash
echo "$0 $$"
##Here do your stuff and redirect the errors to a log file
##if an error is found say using $?, use the following
kill -SIGSTOP $$
##After you'r done correcting your file
##use kill -SIGCONT <pid> on a console, the process shall continue
## Put in a mechanism to retry the last executed command 
echo "I am done!!! after SIGSTOP $$"
exit 0

이는 단지 예시일 뿐이므로 요구 사항에 따라 원하는 방식으로 구현할 수 있습니다.

답변2

이것은 ERR함정을 설정합니다.

trap 'printf "Error for %s, halted, continue with fg\n" "$cmd"; kill -s STOP $$; continue' ERR

while IFS= read -r cmd; do
    command $cmd
done <input

이 트랩은 일반적으로 에서 스크립트가 실행되도록 하는 오류에 의해 트리거됩니다 set -e. 트랩은 정보 메시지를 인쇄한 다음 프로세스를 일시적으로 중지합니다.

사용자가 다시 시작하면 fg트랩 continue의 명령문은 입력의 다음 줄을 읽도록 보장합니다.

스크립트가 일시 중지된 동안 입력 파일을 편집할 수 있습니다. 스크립트는 실패한 명령이 포함된 줄 뒤의 다음 입력 줄부터 계속 읽습니다.

관련 정보