我编写了 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
陷阱中的语句确保读取下一行输入。
当脚本暂停时,可以编辑输入文件。该脚本将从包含失败命令的行之后的下一行输入继续读取。