3 # bashbug - create a bug report and mail it to the bug address
5 # The bug address depends on the release status of the shell. Versions
6 # with status `alpha' or `beta' mail bug reports to chet@po.cwru.edu.
7 # Other versions send mail to bug-bash@gnu.org.
9 # configuration section:
10 # these variables are filled in by the make target in cpp-Makefile
17 PATCHLEVEL="!PATCHLEVEL!"
18 RELSTATUS="!RELSTATUS!"
21 PATH=/bin:/usr/bin:/usr/local/bin:$PATH
25 USAGE="Usage: $0 [--help] [--version] [bug-report-email-address]"
26 VERSTR="GNU bashbug, version ${RELEASE}.${PATCHLEVEL}-${RELSTATUS}"
30 while [ $# -gt 0 ]; do
32 --help) shift ; do_help=y ;;
33 --version) shift ; do_version=y ;;
35 -*) echo "bashbug: ${1}: invalid option" >&2
42 if [ -n "$do_version" ]; then
47 if [ -n "$do_help" ]; then
52 Bashbug is used to send mail to the Bash maintainers
53 for when Bash doesn't behave like you'd like, or expect.
55 Bashbug will start up your editor (as defined by the shell's
56 EDITOR environment variable) with a preformatted bug report
57 template for you to fill in. The report will be mailed to the
58 bash maintainers by default. See the manual for details.
60 If you invoke bashbug by accident, just quit your editor without
61 saving any changes to the template, and no bug report will be sent.
66 # Figure out how to echo a string without a trailing newline
73 BASHTESTERS="bash-testers@po.cwru.edu"
76 alpha*|beta*|devel*) BUGBASH=chet@po.cwru.edu ;;
77 *) BUGBASH=bug-bash@gnu.org ;;
82 echo "$0: This is a testing release. Would you like your bug report"
83 echo "$0: to be sent to the bash-testers mailing list?"
84 echo $n "$0: Send to bash-testers? $c"
87 y*|Y*) BUGBASH="${BUGBASH},${BASHTESTERS}" ;;
91 BUGADDR="${1-$BUGBASH}"
93 if [ -z "$DEFEDITOR" ] && [ -z "$EDITOR" ]; then
94 if [ -x /usr/local/bin/ce ]; then
96 elif [ -x /usr/local/bin/emacs ]; then
98 elif [ -x /usr/contrib/bin/emacs ]; then
100 elif [ -x /usr/bin/emacs ]; then
102 elif [ -x /usr/bin/xemacs ]; then
104 elif [ -x /usr/contrib/bin/jove ]; then
106 elif [ -x /usr/local/bin/jove ]; then
108 elif [ -x /usr/bin/vi ]; then
111 echo "$0: No default editor found: attempting to use vi" >&2
117 : ${EDITOR=$DEFEDITOR}
119 : ${USER=${LOGNAME-`whoami`}}
121 trap 'rm -f $TEMP $TEMP.x; exit 1' 1 2 3 13 15
122 trap 'rm -f $TEMP $TEMP.x' 0
125 if (uname) >/dev/null 2>&1; then
129 if [ -f /usr/lib/sendmail ] ; then
130 RMAIL="/usr/lib/sendmail"
132 elif [ -f /usr/sbin/sendmail ] ; then
133 RMAIL="/usr/sbin/sendmail"
146 Subject: [50 character or so descriptive subject here (for reference)]
148 Configuration Information [Automatically generated, do not change]:
152 Compilation CFLAGS: $CFLAGS
154 Machine Type: $MACHTYPE
156 Bash Version: $RELEASE
157 Patch Level: $PATCHLEVEL
158 Release Status: $RELSTATUS
161 [Detailed description of the problem, suggestion, or complaint.]
164 [Describe the sequence of events that causes the problem
168 [Description of how to fix the problem. If you don't know a
169 fix for the problem, don't include this section.]
172 # this is still raceable
177 trap '' 2 # ignore interrupts while in editor
179 until $EDITOR $TEMP; do
180 echo "$0: editor \`$EDITOR' exited with nonzero status."
181 echo "$0: Perhaps it was interrupted."
182 echo "$0: Type \`y' to give up, and lose your bug report;"
183 echo "$0: type \`n' to re-enter the editor."
184 echo $n "$0: Do you want to give up? $c"
192 trap 'rm -f $TEMP $TEMP.x; exit 1' 2 # restore trap on SIGINT
194 if cmp -s $TEMP $TEMP.x
196 echo "File not changed, no bug report submitted."
200 echo $n "Send bug report? [y/n] $c"
206 ${RMAIL} $SMARGS < $TEMP || {
207 cat $TEMP >> $HOME/dead.bashbug
208 echo "$0: mail failed: report saved in $HOME/dead.bashbug" >&2