#! /bin/sh -e if [ $# -eq 3 -a "$2" = '-d' ]; then pdir="-d $3" elif [ $# -ne 1 ]; then echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" exit 1 fi case "$1" in -patch) patch $pdir -f --no-backup-if-mismatch -p0 < $0;; -unpatch) patch $pdir -f --no-backup-if-mismatch -R -p0 < $0;; *) echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" exit 1 esac exit 0 BASH PATCH REPORT ================= Bash-Release: 3.1 Patch-ID: bash31-005 Bug-Reported-by: Bug-Reference-ID: Bug-Reference-URL: Bug-Description: When tilde expansion fails, POSIX leaves it unspecified whether or not the word undergoes the additional word expansions. Bash-3.1 as distributed skipped the rest of the expansions; this patch restores the bash-3.0 behavior. This means that something like USER=ratbert echo ~$USER will echo `~ratbert' rather than `~$USER'. Patch: *** ../bash-3.1/subst.c Mon Oct 24 09:51:13 2005 --- subst.c Fri Dec 30 12:11:53 2005 *************** *** 6796,6799 **** --- 6823,6832 ---- { temp1 = bash_tilde_expand (temp, tflag); + if (temp1 && *temp1 == '~' && STREQ (temp, temp1)) + { + FREE (temp); + FREE (temp1); + goto add_character; /* tilde expansion failed */ + } free (temp); temp = temp1; *** ../bash-3.1/patchlevel.h Wed Jul 20 13:58:20 2005 --- patchlevel.h Wed Dec 7 13:48:42 2005 *************** *** 26,30 **** looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 4 #endif /* _PATCHLEVEL_H_ */ --- 26,30 ---- looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 5 #endif /* _PATCHLEVEL_H_ */