Apologies if I'm missing something about the expected SIGINT behavior.  I've 
read through the previous SIGINT discussions but this still seems unexpected:

$ declare -p BASH_ARGC BASH_ARGV BASH_SOURCE BASH_LINENO
declare -a BASH_ARGC=()
declare -a BASH_ARGV=()
declare -a BASH_SOURCE=()
declare -a BASH_LINENO=()

$ source <(echo 'kill -INT $$')

$ declare -p BASH_ARGC BASH_ARGV BASH_SOURCE BASH_LINENO
declare -a BASH_ARGC=([0]="1")
declare -a BASH_ARGV=([0]="/dev/fd/63")
declare -a BASH_SOURCE=([0]="/dev/fd/63")
declare -a BASH_LINENO=([0]="5")

Additionally, FUNCNAME is not cleared in some cases:

$ declare -p FUNCNAME
declare -a FUNCNAME

$ source <(echo 'die() { kill -INT $$; }; die')
$ declare -p FUNCNAME
declare -a FUNCNAME

$ source <(echo 'die() { : && kill -INT $$; }; die') 
$ declare -p FUNCNAME
declare -a FUNCNAME=([0]="source")


If the sourced script is running a foreground command then these values are 
returned back to their initial state after the shell receives a SIGINT -- so I 
suspect it's possible to do the same in the cases above.

Reply via email to