Syntaxis:
trap [-lp] [[arg] signal_spec… ]of
val [actie] [signaal]Sleutel | Omschrijving |
-ik | Het wordt gebruikt om de lijst met alle signaalnamen weer te geven met het bijbehorende nummer. |
-p | Het wordt gebruikt om het signaalcommando of het trapcommando voor signal_spec weer te geven. |
arg | Het wordt gebruikt om een commando uit te voeren wanneer de shell de signalen ontvangt. |
signaal_spec | Het bevat de signaalnaam of het signaalnummer. |
- Trap-opdracht zonder arg-waarde of met '-' arg-waarde zal het gespecificeerde signaal terugzetten naar de oorspronkelijke waarde.
- Trap-opdracht met 'null' arg-waarde negeert het gespecificeerde signaal dat door de shell of opdracht wordt verzonden.
- Een signal_spec met de waarde, uitgang(0) voert arg uit na het verlaten van de shell.
- Een signal_spec met de waarde debuggen voert arg uit voor elk afzonderlijk commando.
- Een signal_spec met de waarde terugkeren zal arg uitvoeren telkens wanneer een shell-functie wordt uitgevoerd of een script wordt uitgevoerd door ".”.
- Een signal_spec met de waarde foutje zal elke keer arg uitvoeren bij opdrachtfout.
Trap commando zonder enige optie en arg
Voer de volgende opdracht uit vanaf de terminal om de lijst met alle opdrachten weer te geven die aan elke voorwaarde zijn gekoppeld:. Als een 'trap'-opdracht niet eerder is ingesteld, geeft de volgende opdracht geen informatie weer.
$ valTrap commando met -l optie
Voer de volgende opdracht uit vanaf de terminal om de lijst met alle signaalnamen met nummer weer te geven:.
$ trap -lDe uitvoer van de bovenstaande opdracht toont de lijst met 64 signalen met cijfers.
Stel trap-commando in voor ERR en EXIT
De volgende eerste opdracht stelt een 'trap'-opdracht in die wordt uitgevoerd wanneer een shell-fout optreedt of shell wordt afgesloten. Dit 'trap'-commando zal verwijderen temp.tekst bestand vanaf de huidige locatie. 'ls'-commando wordt gebruikt om de . te controleren temp.tekst bestand bestaat of niet op de huidige locatie. als laatste Uitgang commando wordt gebruikt om de terminal te sluiten en het 'trap'-commando uit te voeren dat eerder is ingesteld.
$ trap 'rm temp.txt' err exit$ ls
$ afsluiten
De volgende uitvoer verschijnt na het uitvoeren van de bovenstaande opdrachten:.
Als de gebruiker nu de terminal opnieuw opent na het afsluiten en de opdracht 'ls' uitvoert, dan temp.tekst bestand zal niet bestaan.
Stel 'trap'-commando in met signaalnummer van SIGUP, SIGQUIT en SIGKILL
Het signaalnummer van SIGUP, SIGQUIT en SIGKILL zijn 1, 3 en 9. De volgende eerste opdracht stelt een val in voor deze drie signalen:. Wanneer een van deze signalen optreedt, verschijnt het bericht “Trap-opdracht wordt uitgevoerd” zal afdrukken. Voer de volgende opdracht uit vanaf de terminal:.
$ trap 'echo Trap-opdracht uitgevoerd' 1 3 9Wanneer de gebruiker op drukt Ctrl+C om het signaal te genereren toewijzen door 'trap' commando dan de 'echo' commando van trap commando zal worden uitgevoerd en de volgende uitvoer zal verschijnen:.
Stel 'trap'-commando in voor SIGTERM in een script
SIGTERM signaal wordt gebruikt om het proces onmiddellijk te beëindigen door zijn bronnen vrij te geven. Maak een bash-bestand met de naam 'trapscript.sh' met de volgende code. Een oneindige for-lus wordt gedeclareerd in het script dat continu een tekst zal afdrukken tot SIGTERM signaal optreedt. De gebruiker moet op drukken Ctrl+Z genereren SIGTERM signaal.
trapscript.sh
#!/bin/bash# Stel een val in voor SIGINT- en SIGTERM-signalen
trap "echo Het programma is beëindigd."SIGTERM SIGINT
#Bericht weergeven om SIGTERM te genereren
echo "Druk op Ctrl+Z om het proces te stoppen"
#Initialiseer tellervariabele, i
i=1
#declare oneindig voor lus
voor(;;)
Doen
#Print bericht met teller i
echo "de lus $i keer uitvoeren"
#Verhoog de teller met één
((i++))
gedaan
Voer het script uit door de volgende opdracht uit te voeren en druk op Ctrl+Z om te genereren SIGTERM signaal. De volgende soortgelijke uitvoer zal verschijnen:.
$ bash trapscript.sh
Stel een 'trap'-opdracht in om een functie uit te voeren op basis van een bepaald signaal
U kunt een 'trap'-opdracht koppelen aan elke door de gebruiker gedefinieerde functie. Maak een bash met de naam trapfunc.sh en voeg het volgende script toe:. Hier, een aangepaste functie met de naam func() is verklaard om een eenvoudig bericht af te drukken, "Taak volbracht". Er is een for-in-lus gedefinieerd om de lijst met alle bestanden en mappen van de huidige werkmap te lezen en af te drukken. 'val' commando dat is gedefinieerd aan het begin van de lijst zal de functie aanroepen, func() wanneer het programma eindigt.
trapfunc.sh
#!/bin/bash# Roep func-functie op bij afsluiten
val func uitgang
# Declareer de functie
functie func()
echo "Taak voltooid"
# Lees de bestanden en mappen van de huidige directorylijst met for loop
voor ik in *
Doen
echo "$i"
gedaan
Voer het script uit vanaf de terminal.
Voer het script uit.
$ bash trapfunc.shDe volgende uitvoer laat zien dat:, "Taak volbracht” tekst wordt afgedrukt na het afdrukken van alle bestanden en mappen van de huidige map.
Conclusie
Deze tutorial laat zien hoe de 'trap'-opdracht in Linux kan worden gebruikt om elke geautomatiseerde taak uit te voeren op basis van gegenereerd signaal. Het helpt gebruikers om verschillende soorten fouten op te sporen en de juiste actie te ondernemen die eerder kan worden toegewezen met behulp van deze opdracht. Veel programma's of scripts wijzen bepaalde bronnen toe wanneer ze in het systeem worden uitgevoerd. Als een actief programma of script abnormaal wordt afgesloten of beëindigd, worden de bronnen die door dat programma worden gebruikt, geblokkeerd. 'trap'-opdracht kan worden gebruikt om dit probleem op te lossen. De taak voor het opschonen van bronnen kan eenvoudig worden uitgevoerd met deze opdracht this. Ik hoop dat de lezer na het lezen van deze tutorial een duidelijk idee krijgt van het gebruik van dit commando.