Un segnale � una specie di "messaggio" che una programma pu� mandare a un altro programma; un esempio di segnale pu� essere la pressione della combinazione di tasti CTRL + C, che genera un segnale INT, che di solito interrompe l'esecuzione dello script.
Mascherare un segnale in uno script significa dunque associare a tale segnale una funzione da eseguire quando questo segnale � ricevuto.
Nella bash, i segnali di sistema possono essere mascherati tramite il comando
trap, secondo la seguente sintassi:
trap nome_funzione nome_segnale
Vediamo un esempio:
#!/bin/bash
# Il seguente script mostra l'utilizzo della funzione trap.
# Nella funzione sono presenti tre conti alla rovescia a partire
# da 10 secondi. E' possibile provare a interrompere tali conteggi
# con CTRL-C (segnale INT) e verificare il comportamento dello
# script.
#
# Durante il primo conteggio, il segnale INT � mascherato con una
# funzione di errore: l'arrivo di questo segnale provoca la
# comparsa sullo schermo dell'errore.
#
# Successivamente, durante il secondo conteggio, il segnale INT viene
# diabilitato: la sua ricezione non provoca alcuna azione.
#
# Infine, durante il terzo conteggio, viene rimossa la maschera: � ora
# possibile interrompere il conteggio.
function errore
{
echo "Mi spiace, non puoi puoi interrompere il conteggio"
sleep 3
}
function conta
{
for i in 10 9 8 7 6 5 4 3 2 1;
do
echo "Sono trascorsi: $i secondi"
sleep 1
done
}
# Programma principale
####### Conteggio 1
trap errore INT # Mascherazione del segnale con una funzione di errore
echo "Conteggio 1:"
conta
echo " "
####### Conteggio 2
trap '' INT # Disabilitazione del segnale
echo "Conteggio 2:"
conta
echo " "
####### Conteggio 3
trap - INT # Rimozione della maschera
echo "Conteggio 3:"
conta