check_output() { testname=$1 cmdtorun=$2 expectedOutput=$3 usestdout=$4 expOutFile=$(mktemp) actualOutFile=$(mktemp) ret=0 echo -ne $expectedOutput > $expOutFile if [ $usestdout -eq 1 ]; then eval $cmdtorun > $actualOutFile else eval $cmdtorun 2> $actualOutFile fi cmp $expOutFile $actualOutFile &> /dev/null if [ $? -eq 1 ]; then echo "$testname:" echo -e "\tWanted:" cat $expOutFile echo -e "\n\tGot:" cat $actualOutFile ret=1 fi rm $expOutFile $actualOutFile return $ret } check_stdout() { check_output "$1" "$2" "$3" 1 } check_stderr() { check_output "$1" "$2" "$3" 0 }