]> git.ipfire.org Git - thirdparty/bash.git/blame - support/bashbug.sh
Bash-5.1 patch 4: fix key-value pair associative array assignment word expansions
[thirdparty/bash.git] / support / bashbug.sh
CommitLineData
726f6388
JA
1#!/bin/sh -
2#
ccc6cda3
JA
3# bashbug - create a bug report and mail it to the bug address
4#
5# The bug address depends on the release status of the shell. Versions
f73dda09 6# with status `devel', `alpha', `beta', or `rc' mail bug reports to
b80f6443 7# chet@cwru.edu and, optionally, to bash-testers@cwru.edu.
cce855bc 8# Other versions send mail to bug-bash@gnu.org.
7117c2d2 9#
8868edaf 10# Copyright (C) 1996-2020 Free Software Foundation, Inc.
7117c2d2 11#
3185942a
JA
12# This program is free software: you can redistribute it and/or modify
13# it under the terms of the GNU General Public License as published by
14# the Free Software Foundation, either version 3 of the License, or
15# (at your option) any later version.
16#
17# This program is distributed in the hope that it will be useful,
18# but WITHOUT ANY WARRANTY; without even the implied warranty of
19# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20# GNU General Public License for more details.
21#
22# You should have received a copy of the GNU General Public License
23# along with this program. If not, see <http://www.gnu.org/licenses/>.
7117c2d2 24
726f6388
JA
25#
26# configuration section:
f73dda09 27# these variables are filled in by the make target in Makefile
726f6388 28#
ccc6cda3
JA
29MACHINE="!MACHINE!"
30OS="!OS!"
31CC="!CC!"
32CFLAGS="!CFLAGS!"
33RELEASE="!RELEASE!"
34PATCHLEVEL="!PATCHLEVEL!"
35RELSTATUS="!RELSTATUS!"
36MACHTYPE="!MACHTYPE!"
37
38PATH=/bin:/usr/bin:/usr/local/bin:$PATH
726f6388
JA
39export PATH
40
b80f6443 41# Check if TMPDIR is set, default to /tmp
f73dda09 42: ${TMPDIR:=/tmp}
28ef6c31 43
b80f6443
JA
44#Securely create a temporary directory for the temporary files
45TEMPDIR=$TMPDIR/bbug.$$
8868edaf 46(umask 077 && mkdir "$TEMPDIR") || {
b80f6443
JA
47 echo "$0: could not create temporary directory" >&2
48 exit 1
49}
50
51TEMPFILE1=$TEMPDIR/bbug1
52TEMPFILE2=$TEMPDIR/bbug2
53
bb70624e
JA
54USAGE="Usage: $0 [--help] [--version] [bug-report-email-address]"
55VERSTR="GNU bashbug, version ${RELEASE}.${PATCHLEVEL}-${RELSTATUS}"
56
57do_help= do_version=
58
59while [ $# -gt 0 ]; do
60 case "$1" in
61 --help) shift ; do_help=y ;;
62 --version) shift ; do_version=y ;;
63 --) shift ; break ;;
64 -*) echo "bashbug: ${1}: invalid option" >&2
a0c0a00f 65 echo "$USAGE" >&2
bb70624e
JA
66 exit 2 ;;
67 *) break ;;
68 esac
69done
70
71if [ -n "$do_version" ]; then
72 echo "${VERSTR}"
73 exit 0
74fi
75
76if [ -n "$do_help" ]; then
77 echo "${VERSTR}"
78 echo "${USAGE}"
79 echo
80 cat << HERE_EOF
81Bashbug is used to send mail to the Bash maintainers
82for when Bash doesn't behave like you'd like, or expect.
83
84Bashbug will start up your editor (as defined by the shell's
85EDITOR environment variable) with a preformatted bug report
86template for you to fill in. The report will be mailed to the
0001803f 87bug-bash mailing list by default. See the manual for details.
bb70624e
JA
88
89If you invoke bashbug by accident, just quit your editor without
90saving any changes to the template, and no bug report will be sent.
91HERE_EOF
92 exit 0
93fi
d166f048
JA
94
95# Figure out how to echo a string without a trailing newline
96N=`echo 'hi there\c'`
97case "$N" in
98*c) n=-n c= ;;
99*) n= c='\c' ;;
100esac
101
b80f6443 102BASHTESTERS="bash-testers@cwru.edu"
726f6388 103
ccc6cda3 104case "$RELSTATUS" in
b80f6443 105alpha*|beta*|devel*|rc*) BUGBASH=chet@cwru.edu ;;
f73dda09 106*) BUGBASH=bug-bash@gnu.org ;;
ccc6cda3
JA
107esac
108
d166f048 109case "$RELSTATUS" in
f73dda09 110alpha*|beta*|devel*|rc*)
bb70624e 111 echo "$0: This is a testing release. Would you like your bug report"
d166f048
JA
112 echo "$0: to be sent to the bash-testers mailing list?"
113 echo $n "$0: Send to bash-testers? $c"
114 read ans
115 case "$ans" in
116 y*|Y*) BUGBASH="${BUGBASH},${BASHTESTERS}" ;;
117 esac ;;
118esac
119
120BUGADDR="${1-$BUGBASH}"
726f6388 121
bb70624e 122if [ -z "$DEFEDITOR" ] && [ -z "$EDITOR" ]; then
28ef6c31
JA
123 if [ -x /usr/bin/editor ]; then
124 DEFEDITOR=editor
125 elif [ -x /usr/local/bin/ce ]; then
bb70624e
JA
126 DEFEDITOR=ce
127 elif [ -x /usr/local/bin/emacs ]; then
128 DEFEDITOR=emacs
129 elif [ -x /usr/contrib/bin/emacs ]; then
130 DEFEDITOR=emacs
131 elif [ -x /usr/bin/emacs ]; then
132 DEFEDITOR=emacs
133 elif [ -x /usr/bin/xemacs ]; then
134 DEFEDITOR=xemacs
8868edaf
CR
135 elif [ -x /usr/bin/nano ]; then
136 DEFEDITOR=nano
bb70624e
JA
137 elif [ -x /usr/contrib/bin/jove ]; then
138 DEFEDITOR=jove
139 elif [ -x /usr/local/bin/jove ]; then
140 DEFEDITOR=jove
141 elif [ -x /usr/bin/vi ]; then
142 DEFEDITOR=vi
143 else
144 echo "$0: No default editor found: attempting to use vi" >&2
145 DEFEDITOR=vi
146 fi
147fi
148
149
150: ${EDITOR=$DEFEDITOR}
726f6388 151
ccc6cda3
JA
152: ${USER=${LOGNAME-`whoami`}}
153
b80f6443
JA
154trap 'rm -rf "$TEMPDIR"; exit 1' 1 2 3 13 15
155trap 'rm -rf "$TEMPDIR"' 0
726f6388
JA
156
157UN=
158if (uname) >/dev/null 2>&1; then
159 UN=`uname -a`
160fi
161
162if [ -f /usr/lib/sendmail ] ; then
163 RMAIL="/usr/lib/sendmail"
bb70624e 164 SMARGS="-i -t"
726f6388
JA
165elif [ -f /usr/sbin/sendmail ] ; then
166 RMAIL="/usr/sbin/sendmail"
bb70624e 167 SMARGS="-i -t"
726f6388
JA
168else
169 RMAIL=rmail
bb70624e 170 SMARGS="$BUGADDR"
726f6388
JA
171fi
172
f73dda09
JA
173INITIAL_SUBJECT='[50 character or so descriptive subject here (for reference)]'
174
f73dda09 175cat > "$TEMPFILE1" <<EOF
726f6388
JA
176From: ${USER}
177To: ${BUGADDR}
f73dda09 178Subject: ${INITIAL_SUBJECT}
726f6388
JA
179
180Configuration Information [Automatically generated, do not change]:
181Machine: $MACHINE
182OS: $OS
183Compiler: $CC
184Compilation CFLAGS: $CFLAGS
185uname output: $UN
ccc6cda3 186Machine Type: $MACHTYPE
726f6388
JA
187
188Bash Version: $RELEASE
189Patch Level: $PATCHLEVEL
ccc6cda3 190Release Status: $RELSTATUS
726f6388
JA
191
192Description:
ccc6cda3 193 [Detailed description of the problem, suggestion, or complaint.]
726f6388
JA
194
195Repeat-By:
ccc6cda3
JA
196 [Describe the sequence of events that causes the problem
197 to occur.]
726f6388
JA
198
199Fix:
ccc6cda3
JA
200 [Description of how to fix the problem. If you don't know a
201 fix for the problem, don't include this section.]
726f6388
JA
202EOF
203
f73dda09
JA
204cp "$TEMPFILE1" "$TEMPFILE2"
205chmod u+w "$TEMPFILE1"
726f6388 206
ccc6cda3
JA
207trap '' 2 # ignore interrupts while in editor
208
f73dda09
JA
209edstat=1
210while [ $edstat -ne 0 ]; do
211 $EDITOR "$TEMPFILE1"
212 edstat=$?
213
214 if [ $edstat -ne 0 ]; then
215 echo "$0: editor \`$EDITOR' exited with nonzero status."
216 echo "$0: Perhaps it was interrupted."
217 echo "$0: Type \`y' to give up, and lose your bug report;"
218 echo "$0: type \`n' to re-enter the editor."
219 echo $n "$0: Do you want to give up? $c"
220
221 read ans
222 case "$ans" in
223 [Yy]*) exit 1 ;;
224 esac
225
226 continue
227 fi
228
229 # find the subject from the temp file and see if it's been changed
230 CURR_SUB=`grep '^Subject: ' "$TEMPFILE1" | sed 's|^Subject:[ ]*||' | sed 1q`
ccc6cda3 231
f73dda09
JA
232 case "$CURR_SUB" in
233 "${INITIAL_SUBJECT}")
234 echo
235 echo "$0: You have not changed the subject from the default."
236 echo "$0: Please use a more descriptive subject header."
237 echo "$0: Type \`y' to give up, and lose your bug report;"
238 echo "$0: type \`n' to re-enter the editor."
239 echo $n "$0: Do you want to give up? $c"
240
241 read ans
242 case "$ans" in
243 [Yy]*) exit 1 ;;
244 esac
245
246 echo "$0: The editor will be restarted in five seconds."
247 sleep 5
248 edstat=1
249 ;;
ccc6cda3 250 esac
f73dda09 251
ccc6cda3
JA
252done
253
b80f6443 254trap 'rm -rf "$TEMPDIR"; exit 1' 2 # restore trap on SIGINT
ccc6cda3 255
f73dda09 256if cmp -s "$TEMPFILE1" "$TEMPFILE2"
726f6388 257then
ccc6cda3
JA
258 echo "File not changed, no bug report submitted."
259 exit
726f6388
JA
260fi
261
0001803f 262echo $n "Send bug report to ${BUGADDR}? [y/n] $c"
d166f048
JA
263read ans
264case "$ans" in
265[Nn]*) exit 0 ;;
266esac
267
f73dda09
JA
268${RMAIL} $SMARGS < "$TEMPFILE1" || {
269 cat "$TEMPFILE1" >> $HOME/dead.bashbug
a0c0a00f
CR
270 echo "$0: mail to ${BUGADDR} failed: report saved in $HOME/dead.bashbug" >&2
271 echo "$0: please send it manually to ${BUGADDR}" >&2
ccc6cda3
JA
272}
273
726f6388 274exit 0