2

ここで終了コード「0」をトラップしようとしています。終了コード 0 がトラップされるたびに、トラップ内でチェック関数が呼び出され、コマンドを使用して HW を再起動しようとしてhascli -rn /いますが、このコマンドの実行は毎回スキップされています。

#!/bin/bash
source $TCE_COMMON
source commonFunctions.sh
trap "
     check
     " 0
checkRGservices
function check
{
 hascli -rn /
 %SLEEP 300
 %NODE none
 #!/bin/bash
 source $TCE_COMMON
 source commonFunctions.sh
 checkForCoreFiles
}

誰でも私がこれから抜け出すのを手伝ってくれますか.

前もってありがとう、マヒ。

4

1 に答える 1

2

ウィリアムがすでに仮定したように:

コンパイラーがプログラム全体をスキャンしてから開始する C や Java などの言語とは対照的に、シェルはトップダウン方式で解釈されます。したがって、関数check()を使用できるようにするには、その前に定義する必要があります。エラー メッセージcheck: command not foundは、この種の問題の強力な指標です。解決策: check()の関数定義をtrapコマンドの上に移動します。

一般的なトラップコマンドに関する 1 つの注意事項: bobahが述べたように、 trapコマンド内でEXITは数字 (ここでは ) の代わりにキーワード (ここでは ) を使用してください。すべての *NIX バリアントが同じ番号を使用するわけではないため (ここでは「0」は特殊なケースですが)、コードが読みやすくなり、さらに移植性が向上します。0

于 2012-04-16T13:02:54.463 に答える