export LC_ALL=C export LANG=C if [ $UID -eq 0 ]; then echo "execscript: the test suite should not be run as root" >&2 fi set -- one two three echo before exec1.sub: "$@" echo calling exec1.sub ./exec1.sub aa bb cc dd ee echo after exec1.sub with args: $? ./exec1.sub echo after exec1.sub without args: $? # set up a fixed path so we know notthere will not be found PATH=/usr/bin:/bin:/usr/local/bin: export PATH notthere echo $? # this is iffy, since the error messages may vary from system to system # and /tmp might not exist ln -s ${THIS_SH} /tmp/bash 2>/dev/null if [ -f /tmp/bash ]; then /tmp/bash notthere else ${THIS_SH} notthere fi echo $? rm -f /tmp/bash # /bin/sh should be there on all systems ${THIS_SH} /bin/sh echo $? # try executing a directory / echo $? ${THIS_SH} / echo $? # try sourcing a directory . / echo $? # try sourcing a binary file -- post-2.04 versions don't do the binary file # check, and will probably fail with `command not found', or status 127 . ${THIS_SH} 2>/dev/null echo $? # post-bash-2.05 versions allow sourcing non-regular files . /dev/null echo $? # kill two birds with one test -- test out the BASH_ENV code echo echo this is bashenv > /tmp/bashenv export BASH_ENV=/tmp/bashenv ${THIS_SH} ./exec3.sub rm -f /tmp/bashenv unset BASH_ENV # we're resetting the $PATH to empty, so this should be last PATH= notthere echo $? command notthere echo $? command -p notthere echo $? # but -p should guarantee that we find all the standard utilities, even # with an empty or unset $PATH command -p sh -c 'echo this is $0' unset PATH command -p sh -c 'echo this is $0' # a bug in bash before bash-2.01 caused PATH to be set to the empty string # when command -p was run with PATH unset echo ${PATH-unset} echo "echo ok" | ${THIS_SH} -t ${THIS_SH} ./exec2.sub echo $? ${THIS_SH} ./exec4.sub # try exec'ing a command that cannot be found in $PATH ${THIS_SH} ./exec5.sub # this was a bug in bash versions before bash-2.04 ${THIS_SH} -c 'cat /dev/null' >&- # checks for proper return values in subshell commands with inverted return # values ${THIS_SH} ./exec6.sub # checks for properly deciding what constitutes an executable file ${THIS_SH} ./exec7.sub true | `echo true` & echo after