Na verdade, interromper o read
interno do bash parece ser um pouco diferente de interromper um comando executado pelo bash. Normalmente, quando você digita trap
, $?
é definido e você pode preservá-lo e sair com o mesmo valor:
trap 'rc=$?; echo $rc SIGINT; exit $rc' INT
trap 'rc=$?; echo $rc EXIT; exit $rc' EXIT
Se o seu script for interrompido ao executar um comando como sleep
ou até mesmo um builtin como wait
, você vai ver
130 SIGINT
130 EXIT
e o código de saída é 130. No entanto, para read -p
, parece que $?
é 0 (na minha versão do bash 4.3.42 de qualquer maneira).
A manipulação de sinais durante read
pode ser um trabalho em andamento, de acordo com
o arquivo de mudanças na minha versão ... (/ usr / share / doc / bash / CHANGES)
changes between this version, bash-4.3-alpha,
and the previous version, bash-4.2-release.
-
New Features in Bash
r. When in Posix mode, 'read' is interruptible by a trapped signal. After
running the trap handler, read returns 128+signal and throws away any
partially-read input.