It's pretty easy to type one too many CTRL-d characters and log out of a Bourne shell without meaning to. The C shell has an
ignoreeof
shell variable (
3.5
)
that won't let you log out with CTRL-d. So do the Korn shell and
bash
; use
set -o ignoreeof
.
Here's a different sort of solution for the Bourne shell. When you end the shell, it asks if you're sure. If you don't answer yes, a new shell is started to replace your old one.
First, make a file like the C shell's .logout that will be read whenyour Bourne shell exits . ( 3.2 ) Save your tty ( 3.8 ) name in an environment variable ( 6.1 ) , too-you'll need it later:
trap |
TTY=`tty`; export TTY trap '. $HOME/.sh_logout; exit' 0 |
|---|
(Your system may need
$LOGDIR
instead of
$HOME
.) Put the following lines in your new
.sh_logout
file:
exec < case exec -sh |
exec < $TTY echo "Do you really want to log out? \c" read ans case "$ans" in [Yy]*) ;; *) exec $HOME/bin/-sh ;; esac |
|---|
The last line is some trickery to start a new
login shell (
51.9
)
. The shell
closes your tty (
45.20
)
before reading your
.sh_logout
file; the
exec < $TTY
reconnects the shell's standard input to your terminal.
Note that if your system is
very
slow, you may not get the reminder message for a couple of seconds-you might forget that it's coming and walk away. That hasn't been a problem where I've tested this. If it is for you though, replace the
read
ans
with a program like
grabchars
(
45.32
)
that times out and gives a default answer after a while. There may be some Bourne shells that need other tricks-and others that don't need these tricks-but this should give you an idea of what to do.
-