265 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			265 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # These should all be safe
 | |
| LC_ALL=C
 | |
| LC_CTYPE=C
 | |
| LC_COLLATE=C
 | |
| LC_MESSAGES=C
 | |
| 
 | |
| # these tests should all generate errors
 | |
| 
 | |
| # make sure we don't exit prematurely
 | |
| set +e
 | |
| set +o posix
 | |
| 
 | |
| # various alias/unalias errors
 | |
| 
 | |
| # at some point, this may mean to `export' an alias, like ksh, but
 | |
| # for now it is an error
 | |
| alias -x foo=barz
 | |
| unalias -x fooaha
 | |
| alias hoowah
 | |
| unalias hoowah
 | |
| 
 | |
| # the iteration variable must be a valid identifier
 | |
| for 1 in a b c; do echo $1; done
 | |
| 
 | |
| # try to rebind a read-only function
 | |
| func()
 | |
| {
 | |
| 	echo func
 | |
| }
 | |
| readonly -f func
 | |
| # make sure `readonly' and `declare' play well together
 | |
| declare -Fr
 | |
| func()
 | |
| {
 | |
| 	echo bar
 | |
| }
 | |
| 
 | |
| # bad option
 | |
| unset -x func
 | |
| 
 | |
| # cannot unset readonly functions or variables
 | |
| unset -f func
 | |
| # or make them not readonly
 | |
| declare -fr func
 | |
| declare -f +r func
 | |
| 
 | |
| XPATH=$PATH
 | |
| declare -r XPATH
 | |
| unset -v XPATH
 | |
| 
 | |
| # cannot unset invalid identifiers
 | |
| unset /bin/sh
 | |
| 
 | |
| # cannot unset function and variable at the same time
 | |
| unset -f -v SHELL
 | |
| 
 | |
| # bad option
 | |
| declare -z
 | |
| # cannot declare invalid identifiers
 | |
| declare -- -z 
 | |
| declare /bin/sh
 | |
| 
 | |
| # this is the syntax used to export functions in the environment, but
 | |
| # it cannot be used with `declare'
 | |
| declare -f func='() { echo "this is func"; }'
 | |
| 
 | |
| # bad option to exec -- this should not exit the script
 | |
| exec -i /bin/sh
 | |
| 
 | |
| # try to export -f something that is not a function -- this should be
 | |
| # an error, not create an `invisible function'
 | |
| export -f XPATH
 | |
| 
 | |
| # this depends on the setting of BREAK_COMPLAINS in config.h.in
 | |
| break
 | |
| continue
 | |
| 
 | |
| # this should not exit the shell; it did in versions before 2.01
 | |
| shift label
 | |
| 
 | |
| # other shells do not complain about the extra arguments; maybe someday
 | |
| # we won't either
 | |
| set -- a b c
 | |
| shift $# label
 | |
| # and get rid of the positional parameters
 | |
| shift $#
 | |
| 
 | |
| # let without an expression is an error, though maybe it should just return
 | |
| # success
 | |
| let
 | |
| 
 | |
| # local outside a function is an error
 | |
| local
 | |
| 
 | |
| # logout of a non-login shell is an error
 | |
| logout
 | |
| 
 | |
| # try to hash a non-existant command
 | |
| hash notthere
 | |
| 
 | |
| # bad option to hash, although it may mean `verbose' at some future point
 | |
| hash -v
 | |
| 
 | |
| # turn off hashing, then try to hash something
 | |
| set +o hashall
 | |
| hash -p ${THIS_SH} ${THIS_SH##*/}
 | |
| 
 | |
| # bad identifiers to declare/readonly/export
 | |
| export AA[4]
 | |
| readonly AA[4]
 | |
| 
 | |
| declare -a AA
 | |
| unset AA[-2]
 | |
| 
 | |
| # try to assign to a readonly array
 | |
| declare -r AA
 | |
| AA=( one two three )
 | |
| 
 | |
| # make sure `readonly -n' doesn't turn off readonly status
 | |
| readonly -n AA
 | |
| AA=(one two three)
 | |
| 
 | |
| # try to assign a readonly array with bad assignment syntax
 | |
| # NOTE: this works in post-bash-2.05 (at least when I write this)
 | |
| # readonly -a ZZZ=bbb
 | |
| 
 | |
| # bad counts to `shift'
 | |
| shopt -s shift_verbose
 | |
| shift $(( $# + 5 ))
 | |
| shift -2
 | |
| 
 | |
| # bad shell options
 | |
| shopt -s no_such_option
 | |
| shopt no_such_option
 | |
| 
 | |
| # non-octal digits for umask and other errors
 | |
| umask 09
 | |
| umask -S u=rwx:g=rwx:o=rx >/dev/null # 002
 | |
| umask -S u:rwx,g:rwx,o:rx >/dev/null # 002
 | |
| 
 | |
| # at some point, this may mean `invert', but for now it is an error
 | |
| umask -i
 | |
| 
 | |
| # bad assignments shouldn't change the umask
 | |
| mask=$(umask)
 | |
| umask g=u
 | |
| mask2=$(umask)
 | |
| if [ "$mask" != "$mask2" ]; then
 | |
| 	echo "umask errors change process umask"
 | |
| fi
 | |
| 
 | |
| # assignment to a readonly variable in environment
 | |
| VAR=4
 | |
| readonly VAR
 | |
| VAR=7 :
 | |
| 
 | |
| # more readonly variable tests
 | |
| declare VAR=88
 | |
| declare +r VAR
 | |
| 
 | |
| declare -p unset
 | |
| 
 | |
| # iteration variable in a for statement being readonly
 | |
| for VAR in 1 2 3 ; do echo $VAR; done
 | |
| 
 | |
| # parser errors
 | |
| : $( for z in 1 2 3; do )
 | |
| : $( for z in 1 2 3; done )
 | |
| 
 | |
| # various `cd' errors
 | |
| ( unset HOME ; cd )
 | |
| ( HOME=/tmp/xyz.bash ; cd )
 | |
| # errors from cd
 | |
| cd -
 | |
| cd /bin/sh	# error - not a directory
 | |
| OLDPWD=/tmp/cd-notthere
 | |
| cd -
 | |
| 
 | |
| # various `source/.' errors
 | |
| .
 | |
| source
 | |
| 
 | |
| # maybe someday this will work like in rc
 | |
| . -i /dev/tty
 | |
| 
 | |
| # make sure that this gives an error rather than setting $1
 | |
| set -q
 | |
| 
 | |
| # enable non-builtins
 | |
| enable sh bash
 | |
| 
 | |
| # try to set and unset shell options simultaneously
 | |
| shopt -s -u checkhash
 | |
| 
 | |
| # this is an error -- bad timeout spec
 | |
| read -t var < /dev/null
 | |
| 
 | |
| # try to read into an invalid identifier
 | |
| read /bin/sh < /dev/null
 | |
| 
 | |
| # try to read into a readonly variable
 | |
| read VAR < /dev/null
 | |
| 
 | |
| # bad option to readonly/export
 | |
| readonly -x foo
 | |
| 
 | |
| # someday these may mean something, but for now they're errors
 | |
| eval -i "echo $-"
 | |
| command -i "echo $-"
 | |
| 
 | |
| # this caused a core dump in bash-2.01 (fixed in bash-2.01.1)
 | |
| eval echo \$[/bin/sh + 0]
 | |
| eval echo '$((/bin/sh + 0))'
 | |
| 
 | |
| # error to list trap for an unknown signal
 | |
| trap -p NOSIG
 | |
| 
 | |
| # maybe someday trap will take a -s argument like kill, but not now
 | |
| trap -p -s NOSIG
 | |
| 
 | |
| # we have a ksh-like ERR trap, post-bash-2.05
 | |
| #trap 'echo [$LINENO] -- error' ERR
 | |
| 
 | |
| # can only return from a function or sourced script
 | |
| return 2
 | |
| 
 | |
| # break and continue with arguments <= 0
 | |
| for z in 1 2 3; do
 | |
| 	break 0
 | |
| 	echo $x
 | |
| done
 | |
| for z in 1 2 3; do
 | |
| 	continue 0
 | |
| 	echo $x
 | |
| done
 | |
| 
 | |
| # builtin with non-builtin
 | |
| builtin bash
 | |
| 
 | |
| # maybe someday you will be able to use fg/bg when job control is not really
 | |
| # active, but for now they are errors
 | |
| bg
 | |
| fg
 | |
| 
 | |
| # argument required
 | |
| kill -s
 | |
| # bad argument
 | |
| kill -S
 | |
| # null argument
 | |
| kill -INT ''
 | |
| # argument required
 | |
| kill -INT
 | |
| 
 | |
| # bad shell option names
 | |
| set -o trackall		# bash is not ksh
 | |
| 
 | |
| # this must be last!
 | |
| # in posix mode, a function name must be a valid identifier
 | |
| # this can't go in posix2.tests, since it causes the shell to exit
 | |
| # immediately
 | |
| set -o posix
 | |
| function !! () { fc -s "$@" ; }
 | |
| set +o posix
 | |
| 
 | |
| echo end
 | 
