159 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| 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: $?
 | |
| echo after exec1.sub: "$@"
 | |
| 
 | |
| # 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
 | |
| # bash-4.1 and later check for 256 NUL characters and fail as binary files
 | |
| # if there are more than that, it's probably binary
 | |
| . ${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 | 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
 | |
| 
 | |
| ${THIS_SH} -i ./exec8.sub
 | |
| 
 | |
| ${THIS_SH} ./exec9.sub
 | |
| 
 | |
| ${THIS_SH} ./exec10.sub
 | |
| ${THIS_SH} ./exec11.sub
 | |
| 
 | |
| true | `echo true` &
 | |
| 
 | |
| echo after
 | |
| 
 | |
| # Problem with bash at least back to version 3.0
 | |
| ${THIS_SH} -c 'VAR=0; VAR=1 command exec; exit ${VAR}'
 | |
| 
 | |
| # problem with bash through bash-4.1
 | |
| (
 | |
|         exec /var/empty/nosuch
 | |
|         echo bad
 | |
| ) 2>/dev/null
 | |
| [ $? = 127 ] || echo FAIL: bad exit status $? at $LINENO
 | |
| 
 | |
| unset FALSE
 | |
| if [ -x /bin/false ]; then
 | |
| 	FALSE=/bin/false
 | |
| elif [ -x /usr/bin/false ]; then
 | |
| 	FALSE=/usr/bin/false
 | |
| else
 | |
| 	FALSE='command false'
 | |
| fi
 | |
| 
 | |
| # problem with undoing redirections before running exit trap through bash-4.3
 | |
| 
 | |
| ${THIS_SH} ./exec12.sub false	# function
 | |
| ${THIS_SH} ./exec12.sub command false
 | |
| ${THIS_SH} ./exec12.sub $FALSE
 | |
| 
 | |
| ${THIS_SH} ./exec12.sub notfound
 | |
| ${THIS_SH} ./exec12.sub syntaxerror
 | |
| ${THIS_SH} ./exec12.sub nosuchcommand
 | |
| 
 | |
| # problem with fork optimization in bash-4.4-alpha
 | |
| 
 | |
| $THIS_SH -c 'echo a && /bin/echo b && echo c'
 | |
| $THIS_SH -c 'echo A && /bin/echo B'
 | |
| 
 | |
| $THIS_SH -c '/bin/echo c && echo d'
 | |
| $THIS_SH -c '/bin/echo c && /bin/echo d && echo e'
 | |
| 
 | |
| ${THIS_SH} ./exec13.sub
 | 
