Why is this simple bash trap

I'm still pretty new to bash scripts, and it's hard for me to understand why this simple trap does not work as expected.

The goal is to create an additional waiting period that you can skip by pressing CTRL+ C.

Expected Result of Pressing CTRL+C - Immediate echo "No time for a nap!" and exit.

The actual result of pressing CTRL+C is an immediate echo of "naptime over". and exit.

#!/bin/bash

nonap() {
    echo "No time for napping!"
    exit
}

trap nonap INT

echo "Sleeping for 5 seconds, hit ctrl-c to proceed now."
sleep 5 
echo "Naptime over."

Why is my trap function not called?

+3
source share
1 answer

I just tried (on old RHEL Linux with bash 3.2.25) and saved your code in trap.sh, launched bash trap.shand got:

 Sleeping for 5 seconds, hit ctrl-c to proceed now.

and then:

No time for napping!

, . , :

Naptime over.

:

, , , . Tinycore Linux GNU bash, 4.0.33 (1) -release (i686-pc-linux-gnu). declare -f nonap trap . script "Naptime over". output, trap trap -- 'nonap' SIGINT declare -f nonap , script.

:

script, ? source . ? ; . , Naptime over.; , No time for napping!, . , ; , , script. .

? script?

... , . , , . , . , , , bash.

, ", , , ", , .

source ( C bash) . ( Bourne, Korn, POSIX shell bash), script , -. ( - ) , , script ; , source. , , trap . ( ksh Toru JL:), :

Toru JL: bash
bash-3.2$ trap
bash-3.2$ source trap.sh
Sleeping for 5 seconds, hit ctrl-c to proceed now.

Naptime over.
bash-3.2$ trap
trap -- 'nonap' INT
bash-3.2$ No time for napping!
Toru JL: 

" !" , , bash, . source, trap INT script, .

, .

... , , script . bash. , ""; (, ) , "".

, - , ksh script ., , :

Toru JL: ksh
$ . trap.sh
Sleeping for 5 seconds, hit ctrl-c to proceed now.
No time for napping!
Toru JL: 
+4

All Articles