从停止执行的地方运行 shell 脚本

从停止执行的地方运行 shell 脚本

我编写了 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.陷阱将打印一条信息消息,然后暂时停止该过程。

当用户使用 恢复它时fgcontinue陷阱中的语句确保读取下一行输入。

当脚本暂停时,可以编辑输入文件。该脚本将从包含失败命令的行之后的下一行输入继续读取。

相关内容