-----------------test2.sh------------------------- #!/bin/sh # If bash or ksh is not the current shell, try to set [ $SHELL != /bin/ksh -a $SHELL != /bin/bash ] && { if [ -x /bin/ksh ] then SHELL=/bin/ksh elif [ -x /bin/bash ] then SHELL=/bin/bash else echo "Error: Unable to locate ksh or bash shell." exit 1 fi export SHELL exec $SHELL $0 "$@" } function foo { echo "Im in $SHELL" } foo --------------------------test.sh-------------------- #!/bin/sh # If bash or ksh is not the current shell, try to set [ $SHELL != /bin/ksh -a $SHELL != /bin/bash ] && { if [ -x /bin/ksh ] then SHELL=/bin/ksh elif [ -x /bin/bash ] then SHELL=/bin/bash else echo "Error: Unable to locate ksh or bash shell." exit 1 fi export SHELL exec $SHELL $0 "$@" } ./test2.sh || exit 1 [ $? == 0 ] && { echo "Worked!!!" exit 0 } exit 1