如何逐行执行bash脚本?

25 浏览
0 Comments

如何逐行执行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有更好的方法吗?

0
0 Comments

如何逐行执行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

正如前面所说,有很多方法可以做到这一点。如果我使用这种方法,我如何知道哪一行(在原始脚本中)导致错误?我想打印出那一行。

0
0 Comments

如何逐行执行bash脚本?

有时候在执行bash脚本时,我们希望能够逐行执行,并且能够知道脚本中哪一行导致了错误。下面将介绍两种方法来实现这个需求。

方法一:使用set -eset +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脚本,并且能够轻松地找出导致错误的行。希望这些方法对你有所帮助!

0
0 Comments

问题:如何逐行执行bash脚本?

原因:有时候我们需要逐行执行bash脚本,以便更好地调试和理解脚本的执行过程。

解决方法:

1. 使用set -e命令,但这种方法也存在一些问题。

2. 另一种方法是在发生错误时退出脚本:command || exit 1

3. 可以使用更简洁的方式编写if语句:if command; then

4. 上述方法与下面的方式是等价的:

command
if test "$?" -eq 0; then

5. 不过还是强调一下,几乎不需要显式地检查$?,因为控制语句如ifwhile已经完成了这个工作,这也是它们的主要用途。

希望对您有所帮助。

0