1

HTKなどのコンポーネントを呼び出して、テキストの電話レベルの境界を計算するbash スクリプトがあります。操作が成功したかどうかを確認するにはどうすればよいですか? 私は次のことを試しました: HCopyHVite

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

上記のアプローチは機能しません。HTKユーティリティによって出力されるすべてのものはrun.log、Error ステートメントと条件を除いて に書き込まれます。したがって、greponの使用run.logは非スターターです。

  1. x=./findWordBoundary.sh <input args>も機能しません。エラー状態を除いて、メッセージの負荷全体をダンプするだけです。x.

私が探しているのはこれです:操作がエラー
になったときにログを記録し、適切なアクションを実行する方法。HTKまた、これはより一般的な bash ユーティリティに拡張できると思いますwget。スクリプト内から、bashユーティリティからログとエラーをどのように処理し、それを処理しますか(たとえば、 をwget返すとき404:Not found exception)?

ありがとう、
スリラム。

4

1 に答える 1

1

通常、Unix/Linux コマンドは終了し、終了コードを「発行」します。成功の標準値は 0 で、エラーの場合はゼロ以外です。

HT ツールが次のような正しい形式の終了コードを発行しているかどうかを確認できます

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

HTcopy をセットアップして、エラーが発生echo $?し、ゼロ以外の値が返されることを知っている場合は、適切なコマンド引数のセットが 0 を出力することを確認してください。

正しい終了コードを取得している場合は、次のようにコードを記述できます

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

もう 1 つの Idom は、終了コードを変数にキャプチャすることです。

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

また、std Unix/Linux は、メッセージに 2 つの別個のストリームを使用します。STDOUT は通常のメッセージと成功メッセージが送信される場所であり、STDERR はエラー メッセージが送信される場所です。STDERR メッセージは、STDOUT ストリームにリダイレクトすることでキャプチャできます。「grepは非スターター」である上記の例を使用すると、次のことができます

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

これが役立つことを願っています。

于 2011-04-20T13:57:32.077 に答える