我有一个bash脚本,可以调用HTK
和HCopy
等HVite
个组件来计算一段文本的电话级边界。如何检查操作是否成功?我尝试过以下方法:
./findWordBoundary.sh <input args> |& tee run.log
上述方法不起作用。除{Error}语句和条件外,HTK
实用程序输出的所有内容都写入run.log
。因此,在grep
上使用run.log
是非首发。
x=./findWordBoundary.sh <input args>
也不起作用。除了错误条件之外,它只会将一大堆消息转储到x.
我正在寻找的是:
在HTK
操作导致错误时记录并采取适当措施的方法。此外,我想这可以扩展到更一般的bash实用程序,比如说,wget
。如何从一个bash实用程序中记录和出错并在脚本中处理它(比如当wget
返回404:Not found exception
时)?
谢谢,
斯利拉姆。
答案 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
我希望这会有所帮助。