1

我有一个 bash 脚本,它调用和计算一段文本的电话级别边界等HTK组件。如何检查手术是否成功?我尝试了以下方法: HCopyHVite

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

上述方法不起作用。实用程序输出的所有内容HTK都写入run.log,但错误语句和条件除外。所以使用greponrun.log是行不通的。

  1. x=./findWordBoundary.sh <input args>也不起作用。除了错误条件之外,它只是将整个消息负载转储到x.

我正在寻找的是:
一种在HTK操作导致错误时记录并采取适当措施的方法。另外,我想这可以扩展到更通用的 bash 实用程序,比如wget. 如何从 bash 实用程序中记录和错误并在脚本中处理它(比如wget返回 a时404:Not found exception)?

谢谢,
斯里拉姆。

4

1 回答 1

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 消息重定向到 STDOUT 流来捕获它们。使用上面的示例,其中“grep 是非首发”,您可以这样做

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

我希望这有帮助。

于 2011-04-20T13:57:32.077 回答