2012-04-13 7 views
2

Ich versuche, den Exit-Code "0" hier zu fangen. Immer wenn der Exit-Code 0 abgefangen wird, überprüfe, ob die Funktion innerhalb des Traps aufgerufen wird, wo ich versuche, die Hardware mit dem Befehl hascli -rn / neu zu starten, aber diese Ausführung wird jedes Mal übersprungen.Verwendung von Trap-Befehl in der Shell

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

Kann mir jemand helfen, hier rauszukommen.

Vielen Dank im Voraus, Mahi.

+1

versuchen Sie "Trap Check EXIT" anstelle Ihres Multi-Line-Konstrukts – bobah

+1

Warum verwenden Sie diese mehrzeilige Zeichenfolge? Was stimmt nicht mit 'Trap Check 0'? – cha0site

+0

Hallo, vielen Dank für den Vorschlag. Ich habe versucht, diese Falle zu überprüfen 0, aber es ist nutzlos ... Es wird in den Protokollen angezeigt als "überprüfen: Befehl nicht gefunden" ... Ihr Rat wird sehr geschätzt. – Mahi

Antwort

2

Als William bereits angenommen:

Im Gegensatz zu Sprachen wie C oder Java, wo ein Compiler das gesamte Programm durchsucht, bevor es beginnt, wird die Schale in einer Top-down-Weise interpretiert. Um Ihre Funktion check() verwenden zu können, müssen Sie sie vorher definieren. Die Fehlermeldung check: command not found ist ein starker Indikator für diese Art von Problem. Lösung: Verschieben Sie die Funktionsdefinition check() über den Befehl trap.

Ein Hinweis auf die Falle Befehl im Allgemeinen: Wie BOBAH angegeben, verwenden Sie Schlüsselwörter (hier: EXIT) statt Zahlen (hier: 0) innerhalb des Falle Befehl. Es macht Ihren Code lesbarer und außerdem portabler, da nicht alle * NIX Varianten die gleichen Nummern verwenden (obwohl '0' hier ein Sonderfall ist).

+0

#!/Bin/bash Quelle $ TCE_COMMON Quelle commonFunctions.sh checkRGservices Funktionskontrolle { hascli -rn/ % SLEEP 300 % NODE keine #!/Bin/bash Quelle $ TCE_COMMON Quelle commonFunctions .sh checkForCoreFiles } Trap Check EXIT ..... – Mahi

+0

Ich habe wie oben geändert, aber hascli -rn/wird jedes Mal übersprungen, ich führe dieses Skript .... Bitte sugget mir jede Lösung. – Mahi

+0

unwahrscheinlich, dass ein Befehl übersprungen wird. Vielleicht möchtest du etwas anderes machen. Beachten Sie, dass der Trap-Befehl bewirkt, dass die Funktion aufgerufen wird, wenn Ihr Skript beendet wird. Könnte es sein, dass du etwas anderes meintest - vielleicht den Returncode eines Befehls überprüfen? – ktf

Verwandte Themen