Package: bash
Version: 5.0-4
Severity: normal
Tags: upstream
Dear Maintainer,
In a bash script I want to display the actual trap EXIT definition.
But in a subshell not the trap definition of the subshell, but of the
main script is displayed.
To show the problem I use the script trap_handling:
set -u
set -e
f1()
{
echo "f1: show trap:" >&2
trap >&2
}
f2()
{
trap "/bin/echo f2" EXIT
}
trap "/bin/echo main" EXIT
echo "f1 output: <$(f1)>"
echo "f2 output: <$(f2)>"
To start the script I use the script test.trap_handling which also tests
other shells:
#!/bin/sh
for i in "busybox sh" bash dash mksh posh; do
echo "--- $i ---"
eval "/bin/$i ./trap_handling"
done
The output of this is:
--- busybox sh ---
f1: show trap:
f1 output: <>
f2 output:
main
--- bash ---
f1: show trap:
trap -- '/bin/echo main' EXIT
f1 output: <>
f2 output:
main
--- dash ---
f1: show trap:
f1 output: <>
f2 output:
main
--- mksh ---
f1: show trap:
f1 output: <>
f2 output:
main
--- posh ---
f1: show trap:
f1 output: <>
f2 output: <>
main
As you can see bash displays the wrong trap in the subfunction f1.
But it correctly does not execute it, when leaving f1.
A trap defined in f2 is correctly executed.
So it seems only to be a problem of displaying the trap.
-- System Information:
Debian Release: buster/sid
APT prefers testing
APT policy: (500, 'testing')
Architecture: amd64 (x86_64)
Kernel: Linux 4.19.0-5-amd64 (SMP w/1 CPU core)
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1), LANGUAGE=en_US
(charmap=ISO-8859-1)
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages bash depends on:
ii base-files 10.1
ii debianutils 4.8.6.1
ii libc62.28-10
ii libtinfo66.1+20181013-2
Versions of packages bash recommends:
ii bash-completion 1:2.8-6
Versions of packages bash suggests:
pn bash-doc
-- no debconf information