如何逐行执行bash脚本?
如何逐行执行bash脚本?
我想逐行执行bash脚本并测试每个执行的退出码($?),以确定是否继续执行:\n基本上意味着我需要在原始脚本的每一行下面添加以下脚本:\n如果测试$?是否等于0\n那么\n echo \"没有错误\"\n否则\n echo \"错误\"\n 退出\nfi\n原始脚本变为:\n#Example Script\nwget http://file1.com\n如果测试$?是否等于0\n那么\n echo \"没有错误\"\n否则\n echo \"错误\"\n 退出\nfi\ncd /dir\n如果测试$?是否等于0\n那么\n echo \"没有错误\"\n否则\n echo \"错误\"\n 退出\nfi\nwget http://file2.com\n如果测试$?是否等于0\n那么\n echo \"没有错误\"\n否则\n echo \"错误\"\n 退出\nfi\nwget http://file3.com\n如果测试$?是否等于0\n那么\n echo \"没有错误\"\n否则\n echo \"错误\"\n 退出\nfi\n但是这个脚本变得冗长臃肿。\n有更好的方法吗?
如何逐行执行bash脚本?
有许多方法可以做到这一点。例如,可以使用“set”命令来自动停止在“错误”返回代码上;只需在脚本的顶部加上set -e
。或者,您可以编写一个“check_rc”函数;参见这里的一些起点。
或者,您可以从以下内容开始:
check_error () { if [ $RET == 0 ]; then echo "DONE" echo "" else echo "ERROR" exit 1 fi }
使用方法如下:
echo "some example command" RET=$? ; check_error
正如前面所说,有很多方法可以做到这一点。如果我使用这种方法,我如何知道哪一行(在原始脚本中)导致错误?我想打印出那一行。
如何逐行执行bash脚本?
有时候在执行bash脚本时,我们希望能够逐行执行,并且能够知道脚本中哪一行导致了错误。下面将介绍两种方法来实现这个需求。
方法一:使用set -e
和set +e
命令
在bash脚本中使用set -e
命令可以使脚本在任何命令返回非零退出状态时失败。而使用set +e
命令则会取消这个设置。但是,如果使用了set -e
命令,我们如何知道是哪一行导致了错误呢?我们可以使用set -x
命令来实现这个功能。因此,我们可以使用set -ex
命令来同时实现逐行执行和打印出导致错误的行。
方法二:使用2>&1 | tee -a log
命令
另一种方法是将脚本的输出重定向到一个日志文件中,这样我们就可以随时查看日志来判断哪一行导致了错误。具体操作是将脚本的每一行命令的输出通过2>&1
重定向到标准输出,然后使用tee -a log
将标准输出追加到一个日志文件中。
下面是一个相关的讨论:stackoverflow.com/questions/10743026/…。
通过上述两种方法,我们可以方便地逐行执行bash脚本,并且能够轻松地找出导致错误的行。希望这些方法对你有所帮助!