2012-04-13 4 views
2

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

#!/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 
} 

いずれにしてもこの問題を解決できますか?

ありがとうございます。 Mahi。

+1

複数行の構文の代わりに "trap check EXIT"を試してください – bobah

+1

なぜその複数行の文字列を使用していますか? 'trap check 0'の何が間違っていますか? – cha0site

+0

こんにちは、ありがとう、提案のためにたくさん。私はこのトラップチェック0を試みたが、それは使用していない...それは "チェック:コマンドが見つかりません"としてログに表示されます...あなたのアドバイスは大歓迎です。 – Mahi

答えて

2

ウィリアム既に想定として:それは開始する前に、コンパイラは、プログラム全体をスキャンCまたはJavaなどの言語とは対照的に

、シェルは、トップダウン方式で解釈されます。したがって、あなたの関数を使用できるようにするには、check()を定義する必要があります。エラーメッセージcheck: command not foundは、この種の問題の強力な指標です。対処:の関数定義をcheck()に移動して、トラップコマンドの上に移動します。一般的にはトラップコマンドへ

ワンノート:bobahが述べたように、使用のキーワード(ここでは:EXIT)(ここでは:0)の代わりに、数字トラップコマンド内。すべての* NIXバリアントが同じ数字を使用するわけではありません(ただし、ここでは「0」は特別なケースです)。

+0

#!/ binに/ bashの ソース$ TCE_COMMON ソースcommonFunctions.sh checkRGservices 機能チェック { hascli -rn/ %SLEEP 300 %のNODEなし #!/ binに/ bashの ソースの$ TCE_COMMON ソースcommonFunctions .sh checkForCoreFiles トラップチェック終了..... – Mahi

+0

私は上記のように変更しましたが、hascli -rn /は毎回スキップされています。このスクリプトを実行します....私にはどんな解決策も教えてください。 – Mahi

+0

コマンドがスキップされることはありません。多分何か違うことをしたいと思うかもしれません。 trapコマンドは、スクリプトの終了時に関数が呼び出されることに注意してください。コマンドのリターンコードをチェックしているかもしれません。 – ktf

関連する問題