Linux-opdrachten

Bash trap-opdracht

Bash trap-opdracht
Een ingebouwd bash-commando dat wordt gebruikt om een ​​commando uit te voeren wanneer de shell een signaal ontvangt, wordt 'trap' genoemd. Wanneer er een gebeurtenis plaatsvindt, stuurt bash de melding door een willekeurig signaal. Veel signalen zijn beschikbaar in bash. Het meest voorkomende signaal van bash is SIGINT (Signal Interrupt). Wanneer de gebruiker op CTRL+C drukt om een ​​proces vanaf de terminal te onderbreken, wordt dit signaal verzonden om het systeem op de hoogte te stellen.  Hoe u het trap-commando kunt gebruiken om verschillende soorten signalen af ​​te handelen, wordt uitgelegd in deze tutorial.

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 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.

$ val

Trap commando met -l optie

Voer de volgende opdracht uit vanaf de terminal om de lijst met alle signaalnamen met nummer weer te geven:.

$ trap -l

De 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 9

Wanneer 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.sh

De 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.

Strijd om Wesnoth 1.13.6 Ontwikkeling vrijgegeven
Strijd om Wesnoth 1.13.6 die vorige maand werd uitgebracht, is de zesde ontwikkelingsrelease in de 1.13.x-serie en het levert een aantal verbeteringen...
Hoe League Of Legends op Ubuntu 14 te installeren.04
Als je fan bent van League of Legends, dan is dit een kans voor jou om League of Legends te testen. Merk op dat LOL wordt ondersteund op PlayOnLinux a...
Installeer de nieuwste OpenRA Strategy Game op Ubuntu Linux
OpenRA is een Libre/Free Real Time Strategy-game-engine die de vroege Westwood-games nabootst, zoals de klassieke Command & Conquer: Red Alert. Gedist...