2010-12-16 6 views
1

Gibt es eine Möglichkeit für mich, benutzerdefinierte gefälschte Signale in ksh zu implementieren? Momentan nehme ich das ERR-Signal auf und beende es. Aufgrund einer Änderung gibt es jedoch Aufrufe, die möglicherweise keinen Erfolg zurückgeben, dies ist jedoch eine gültige Bedingung. In diesem Fall möchte ich sicherstellen, dass dieser Aufruf ein anderes Signal erzeugt oder den ERR anders behandelt. Gibt es eine Möglichkeit, das zu tun?benutzerdefinierte Trap-Signal in ksh

Antwort

2

Sie können kill verwenden, um jedes gewünschte Signal an die aktuelle Shell zu senden. Sie können 10 in einer Subshell oder return in einer Funktion verwenden, um einen beliebigen Fehlercode einzustellen.

dieses Skript Versuchen:

#!/bin/ksh 
trap 'echo USR1 signal processed' USR1 
trap 'echo ERR signal processed' ERR 
[[ $1 == a ]] && kill -s USR1 $$ || (exit 1) 
echo "done" 

Beispiel:

$ ./testsignal 
ERR signal processed 
done 
$ ./testsignal a 
USR1 signal processed 
done 
+0

Hmm, HI Dennis, interessanterweise funktioniert das nicht. Ich sehe nur das oben gezeigte Echo und sehe nicht, dass der USR1 gefangen wird. Im obigen Fall wird selbst ERR nicht abgefangen. Als ich jedoch das folgende chmod 777 hinzufügte, wo ich keine Erlaubnis habe, druckte es "ERR Signal verarbeitet" – Kiran

+0

Es funktioniert. Ich habe gerade den falschen Parameter übergeben! – Kiran

0

Vielleicht könnten Sie einfach die Anweisungen, deren Exit-Codes Sie behandeln möchten, einfach in eine Konstruktion einfügen, die einfach das macht, was Sie wollen (mit "oder" oder "wenn nicht" -Konstruktionen und Analyse der Exit-Codes).

Das scheint ein viel sauberer Programmierstil zu sein, oder?

+0

:) das ist, was ich jetzt tue! wollte weiter aufräumen und basierend auf dem, was ich habe, das Einfangen von Signalen in ein paar Funktionen schien der sauberste Weg – Kiran