检查程序中的错误代码 - 特别是HTK Toolkit

时间:2011-04-20 10:53:19

标签: bash error-handling hidden-markov-models error-code htk

我有一个bash脚本,可以调用HTKHCopyHVite个组件来计算一段文本的电话级边界。如何检查操作是否成功?我尝试过以下方法:

  1. ./findWordBoundary.sh <input args> |& tee run.log
  2. 上述方法不起作用。除{Error}语句和条件外,HTK实用程序输出的所有内容都写入run.log。因此,在grep上使用run.log是非首发。

    1. x=./findWordBoundary.sh <input args>也不起作用。除了错误条件之外,它只会将一大堆消息转储到x.
    2. 我正在寻找的是:
      HTK操作导致错误时记录并采取适当措施的方法。此外,我想这可以扩展到更一般的bash实用程序,比如说,wget。如何从一个bash实用程序中记录和出错并在脚本中处理它(比如当wget返回404:Not found exception时)?

      谢谢,
      斯利拉姆。

1 个答案:

答案 0 :(得分:1)

通常,Unix / Linux命令完成并“发出”退出代码。成功的标准值为0,错误为非零。

您可以看到您的HT工具是否正在发出正确形成的退出代码,例如

HTcopy ... (args ) ...
echo $?

如果你设置你的HTcopy,你知道你应该得到一个错误并且echo $?返回非零,那么检查一组好的命令args是否发出0。

如果您获得了正确的退出代码,您可以编写代码,如

if HTcopy .. (args).. ; then
   printf "do the next step\n"
   #etc
else
   printf "error on HTcopy, can't continue\n"
   exit 1
fi

另一个目的是将退出代码捕获到变量

HTcopy ... (args ) ...
h_rc=$?
if [[ ${h_rc} != 0 ]]] ; then
   printf "error on HTcopy, can't continue\n"
   exit 1
fi

此外,std Unix / Linux使用两个独立的消息流。 STDOUT是正常消息和成功消息的去向,而STDERR是错误消息的去向。您可以通过将STDERR msgs重定向到STDOUT流来捕获它们。使用上面的例子'grep是非首发',你可以做

./findWordBoundary.sh <input args> 2>&1 |& tee run.log

我希望这会有所帮助。