bashshell

How to prevent a user from using ctrl-c to stop a script?


I load a script in .bash_profile and this script will ask for right password whenever a user opens a terminal window. If the user enters a wrong code, the script will run exit to stop the current terminal.

if [ $code = "980425" ]; then
    echo hello
else
    exit
fi

But I realize that the user can always use ctrl-c to stop the script and enter the terminal. How to avoid that?


Solution

  • You can always trap SIGINT:

    trap 'echo got SIGINT' INT
    

    Once you're done, reinstall the default handler again with

    trap INT
    

    See the POSIX spec for trap for details. This works in all Bourne shells, not just bash.

    Note that while Bash accepts SIGINT for the signal name, many Bourne shells require the name to be just INT.