GNU/Linux >> Znalost Linux >  >> Linux

Vysvětlení příkazu Bash trap

Úvod

Skript shellu může při svém provádění narazit na problémy, což má za následek chybový signál, který skript neočekávaně přeruší.

K chybám dochází v důsledku chybného návrhu skriptu, akcí uživatele nebo selhání systému. Skript, který selže, může zanechat dočasné soubory, které způsobí potíže, když uživatel skript restartuje.

Tento tutoriál vám ukáže, jak používat trap zajistíte, že se vaše skripty vždy předvídatelně ukončí.

Předpoklady

  • Přístup k terminálu/příkazovému řádku.
  • Textový editor (Nano, Vi/Vim atd.).

Syntaxe pasti bash

Syntaxe pro trap příkaz je:

trap [options] "[arguments]" [signals]

Příkaz má následující součásti:

  • Možnosti poskytují k příkazu další funkce.
  • Argumenty jsou příkazy trap spustí se při detekci signálu. Pokud není příkaz pouze jedním slovem, měl by být uzavřen v uvozovkách (" " ). Pokud argument obsahuje více než jeden příkaz, oddělte je středníkem (; ).
  • Signály jsou asynchronní upozornění zasílaná systémem, obvykle indikující přerušení generované uživatelem nebo související se systémem. Signály lze volat jejich jménem nebo číslem.

Možnosti Bash trap

trap příkaz přijímá následující možnosti:

  • -p - Zobrazuje signální příkazy.
  • -l - Vytiskne seznam všech signálů a jejich čísel.

Níže je uveden úplný seznam 64 signálů a jejich čísla:

# Signál # Signál # Signál
1 SIGHUP 23 SIGURG 45 SIGRTMIN+11
2 SIGINT 24 SIGXCPU 46 SIGRTMIN+12
3 SIGQUIT 25 SIGXFSZ 47 SIGRTMIN+13
4 SIGILL 26 SIGVTALRM 48 SIGRTMIN+14
5 SIGTRAP 27 SIGPROF 49 SIGRTMIN+15
6 SIGABRT 28 SIGWINCH 50 SIGRTMAX-14
7 SIGBUS 29 SIGIO 51 SIGRTMAX-13
8 SIGFPE 30 SIGPWR 52 SIGRTMAX-12
9 SIGKILL 31 SIGSYS 53 SIGRTMAX-11
10 SIGUSR1 32 SIGWAITING 54 SIGRTMAX-10
11 SIGSEGV 33 SIGLWP 55 SIGRTMAX-9
12 SIGUSR2 34 SIGRTMIN 56 SIGRTMAX-8
13 SIGPIPE 35 SIGRTMIN+1 57 SIGRTMAX-7
14 SIGALRM 36 SIGRTMIN+2 58 SIGRTMAX-6
15 SIGTERM 37 SIGRTMIN+3 59 SIGRTMAX-5
16 SIGSTKFLT 38 SIGRTMIN+4 60 SIGRTMAX-4
17 SIGCHLD 39 SIGRTMIN+5 61 SIGRTMAX-3
18 SIGCONT 40 SIGRTMIN+6 62 SIGRTMAX-2
19 SIGSTOP 41 SIGRTMIN+7 63 SIGRTMAX-1
20 SIGTSTP 42 SIGRTMIN+8 64 SIGRTMAX
21 SIGTTIN 43 SIGRTMIN+9
22 SIGTTOU 44 SIGRTMIN+10

Nejčastěji používané signály s trap příkazy jsou:

  • SIGHUP (1) - Uklidit
  • SIGINT (2) - Přerušit
  • SIGQUIT (3) - Konec
  • SIGABRT (6) - Zrušit
  • SIGALRM (14) - Budík
  • SIGTERM (15) - Ukončit

Jak používat past v Bash

Typický scénář pro použití trap příkaz zachycuje SIGINT signál. Tento signál odešle systém, když uživatel přeruší provádění skriptu stisknutím Ctrl+C .

Následující ukázkový skript vytiskne slovo „Test " každou sekundu, dokud jej uživatel nepřeruší klávesou Ctrl+C . Skript poté vytiskne zprávu a ukončí se.

trap "echo The script is terminated; exit" SIGINT

while true
do
    echo Test
    sleep 1
done

while smyčka ve výše uvedeném příkladu se provádí nekonečně. První řádek skriptu obsahuje trap příkaz a pokyny k čekání na SIGINT signál, vytiskněte zprávu a ukončete skript.

trap Příkaz se často používá k vyčištění dočasných souborů, pokud se skript ukončí kvůli přerušení. Následující příklad definuje cleanup funkce, která vytiskne zprávu, odstraní všechny soubory přidané do $TRASH proměnnou a ukončí skript.

$TRASH=$(mktemp -t tmp.XXXXXXXXXX)

trap cleanup 1 2 3 6

cleanup()
{
  echo "Removing temporary files:"
  rm -rf "$TRASH"
  exit
}

...

trap ve výše uvedeném příkladu provede cleanup funkce, když detekuje jeden ze čtyř signálů:SIGHUP , SIGINT , SIGQUIT nebo SIGABRT . Signály jsou označeny jejich číslem.

Můžete také použít trap aby uživatel nemohl přerušit provádění skriptu. Tato funkce je důležitá při provádění citlivých příkazů, jejichž přerušení může trvale poškodit systém. Syntaxe pro deaktivaci signálu je:

trap "" [signal]

Dvojité uvozovky znamenají, že nebude proveden žádný příkaz. Například k zachycení SIGINT a SIGABRT signály, zadejte:

trap "" SIGINT SIGABRT
[a command that must not be interrupted]

Pokud chcete signály kdykoli během skriptu znovu povolit, resetujte pravidla pomocí symbolu pomlčky:

trap - SIGINT SIGABRT
[a command that can be interrupted]

Linux
  1. Příkaz historie v Linuxu Vysvětleno do hloubky

  2. příkaz pro export bash

  3. Spusťte příkaz bash na jenkins pipeline

  1. Vysvětlení matematických operací Bash (aritmetika Bash).

  2. Bash čeká příkaz

  3. Bash četl příkaz

  1. Bash Heredoc

  2. Příkaz zdroje Bash

  3. Příkaz historie v Linuxu (Bash History)