我正在编写一个大约 20 行的脚本,我发现自己通过复制粘贴和逐行执行来一次又一次地进行测试。
Enter我不想复制粘贴每一行并点击执行复制粘贴整个脚本无需一次性执行(作为一个块或一个此处文档),而是像时尚这样的查询;例如:
第一行 get 定期(无条件)执行,并且询问我是否希望继续执行即将到来的行(在有足够的时间考虑输出之后);
如果我选择继续——那就这样吧,如果不继续,操作就会中断;
(到目前为止的结果当然不会回滚,但我至少不会继续产生进一步有问题的结果);
应逐行重复此模式,直到脚本结束。
有没有一个实用程序可以帮助我以这种方式工作?
答案1
你可以使用Bash 调试器调试您的脚本。
一个更简单的选择是使用DEBUG
陷阱:
#!/bin/bash
function prompt {
if [[ -n "$BASH_COMMAND" ]]; then
echo About to run \'$BASH_COMMAND\'
read -p 'Continue [Y/n]?' CONT
if [[ "$CONT" = "n" || "$CONT" = "N" ]]; then
echo Exiting prematurely
exit 1
fi
fi
}
trap prompt DEBUG
echo Hello
ls
sleep 10
prompt
设置陷阱后,这将在每个命令之前运行该函数,让您可以选择继续或中止。以 开头的行将echo Hello
被替换为您的脚本,或者更好的是,您可以将函数和trap
命令存储在单独的 scriptlet 中,并将其放在source
要调试的脚本内。
陷阱有一些微妙之处DEBUG
;其一,它不会触发内部函数,除非它已在函数内部重新设置(因此您可以跳过不想调试的函数,包括函数prompt
本身,但您需要记住在trap
您要调试的函数内部运行)做想要调试)。
可以在脚本中随意启用和禁用跟踪行为,分别通过添加
trap prompt DEBUG
和
trap "" DEBUG
作为适当的。