Syntaxe:
trap [-lp] [[arg] spéc_signal… ]ou alors
piège [action] [signal]Clé | La description |
-je | Il est utilisé pour afficher la liste de tous les noms de signaux avec le numéro correspondant. |
-p | Il est utilisé pour afficher la commande de signal ou la commande de trap pour signal_spec. |
argument | Il est utilisé pour exécuter une commande lorsque le shell reçoit le(s) signal(s). |
spéc_signal | Il contient le nom ou le numéro du signal. |
- La commande Trap sans valeur arg ou avec la valeur '-' arg réinitialisera le signal spécifié à sa valeur d'origine.
- La commande Trap avec la valeur 'null' arg ignorera le signal spécifié envoyé par le shell ou la commande.
- Un signal_spec avec la valeur, sortie(0) exécutera arg après avoir quitté le shell.
- Un signal_spec avec la valeur déboguer exécutera arg avant chaque commande.
- Un signal_spec avec la valeur revenir exécutera arg chaque fois qu'une fonction shell s'exécute ou un script exécuté par ".".
- Un signal_spec avec la valeur se tromper exécutera arg à chaque fois en cas d'échec de la commande.
Commande Trap sans aucune option et arg
Exécutez la commande suivante depuis le terminal pour afficher la liste de toutes les commandes associées à chaque condition. Si aucune commande 'trap' n'est définie avant, la commande suivante n'affichera aucune information.
$ piègeCommande d'interception avec l'option -l
Exécutez la commande suivante depuis le terminal pour afficher la liste de tous les noms de signaux avec le numéro.
$ piège -lLa sortie de la commande ci-dessus affichera la liste des 64 signaux avec des nombres.
Définir la commande trap pour ERR et EXIT
La première commande suivante définira une commande 'trap' qui s'exécutera lorsqu'une erreur de shell se produit ou que le shell se termine. Cette commande 'trap' supprimera température.SMS fichier à partir de l'emplacement actuel. La commande 'ls' est utilisée pour vérifier le température.SMS le fichier existe ou non à l'emplacement actuel. dernièrement sortir La commande est utilisée pour fermer le terminal et exécuter la commande 'trap' définie avant.
$ trap 'rm temp.txt' erreur sortie$ ls
$ sortie
La sortie suivante apparaîtra après avoir exécuté les commandes ci-dessus.
Maintenant, si l'utilisateur ouvre à nouveau le terminal après la sortie et exécute la commande 'ls' alors température.SMS le fichier n'existera pas.
Définir la commande 'trap' avec le numéro de signal de SIGUP, SIGQUIT et SIGKILL
Le numéro de signal de SIGUP, SIGQUIT et SIGKILL sont 1, 3 et 9. La première commande suivante définira un piège pour ces trois signaux. Lorsque l'un de ces signaux se produira, le message "La commande Trap est exécutée” imprimera. Exécutez la commande suivante depuis le terminal.
$ trap 'echo Trap commande exécutée' 1 3 9Lorsque l'utilisateur appuie sur Ctrl+C pour générer le signal assigné par la commande 'trap' puis le 'écho' la commande de trap s'exécutera et la sortie suivante apparaîtra.
Définir la commande 'trap' pour SIGTERM dans un script
SIGTERM signal est utilisé pour terminer le processus immédiatement en libérant ses ressources. Créez un fichier bash nommé 'piège.sh' avec le code suivant. Une boucle for infinie est déclarée dans le script qui imprimera un texte en continu jusqu'à ce que SIGTERM le signal se produit. L'utilisateur doit appuyer sur Ctrl+Z générer SIGTERM signal.
piège.sh
#!/bin/bash# Définir un piège pour les signaux SIGINT et SIGTERM
trap "echo Le programme est terminé." SIGTERM SIGINT
#Afficher le message pour générer SIGTERM
echo "Appuyez sur Ctrl+Z pour arrêter le processus"
#Initialiser la variable de compteur, je
i=1
#declare une boucle for infinie
pour(;;)
fais
#Imprimer le message avec le compteur i
echo "exécution de la boucle $i fois"
#Incrémenter le compteur de un
((i++))
Fini
Exécutez le script en exécutant la commande suivante et appuyez sur Ctrl+Z pour générer SIGTERM signal. La sortie similaire suivante apparaîtra.
$ bash trapscript.sh
Définir une commande 'trap' pour exécuter une fonction basée sur un signal particulier
Vous pouvez associer une commande 'trap' à n'importe quelle fonction définie par l'utilisateur. Créer un bash nommé piège.sh et ajoutez le script suivant. Ici, une fonction personnalisée nommée fonction() est déclaré pour imprimer un message simple, "Tâche terminée". Une boucle for-in est définie pour lire et imprimer la liste de tous les fichiers et dossiers du répertoire de travail actuel. 'prendre au piège' la commande définie au début de la liste appellera la fonction, fonction() quand le programme se termine.
piège.sh
#!/bin/bash# Appeler la fonction func en quittant
trap func sortie
# Déclarer la fonction
fonction fonction()
echo "Tâche terminée"
# Lire les fichiers et dossiers de la liste de répertoires actuelle à l'aide de la boucle for
pour moi dans *
fais
echo "$i"
Fini
Exécutez le script depuis le terminal.
Exécutez le script.
$ bash trapfunc.shLa sortie suivante montre que, "Tâche terminée” le texte est imprimé après l'impression de tous les fichiers et dossiers du répertoire courant.
Conclusion
Ce tutoriel montre comment la commande 'trap' peut être utilisée sous Linux pour effectuer n'importe quelle tâche automatisée basée sur le signal généré. Il aide les utilisateurs à tracer différents types d'erreurs et à prendre les mesures appropriées qui peuvent être attribuées auparavant à l'aide de cette commande. De nombreux programmes ou scripts allouent des ressources particulières lors de l'exécution dans le système. Si un programme ou un script en cours d'exécution se termine ou se termine de manière anormale, les ressources utilisées par ce programme sont bloquées. La commande 'trap' peut être utilisée pour résoudre ce problème. La tâche de nettoyage des ressources peut être effectuée facilement en utilisant cette commande. Espérons que le lecteur se fasse une idée précise des usages de cette commande après avoir lu ce tutoriel.