exec >&2 redo-ifchange ../t/shelltest.od rm -rf $1.new mkdir $1.new GOOD= WARN= # Note: list low-functionality, maximally POSIX-like shells before more # powerful ones. We want weaker shells to take precedence, as long as they # pass the tests, because weaker shells are more likely to point out when you # use some non-portable feature. for sh in dash /usr/xpg4/bin/sh ash posh mksh ksh ksh88 ksh93 pdksh \ zsh bash busybox /bin/sh; do printf " %-22s" "$sh..." FOUND=`which $sh 2>/dev/null` || { echo "missing"; continue; } # It's important for the file to actually be named 'sh'. Some # shells (like bash and zsh) only go into POSIX-compatible mode if # they have that name. If they're not in POSIX-compatible mode, # they'll fail the test. rm -f $1.new/sh ln -s $FOUND $1.new/sh SH=$PWD/$1.new/sh set +e ( cd ../t && "$SH" shelltest.od ) >shelltest.tmp 2>&1 RV=$? set -e msgs= crash= while read line; do #echo "line: '$line'" >&2 stripw=${line#warning: } stripf=${line#failed: } crash=$line [ "$line" = "$stripw" ] || msgs="$msgs W$stripw" [ "$line" = "$stripf" ] || msgs="$msgs F$stripf" done