da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin########################################################################
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# This software is part of the ast package #
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# Copyright (c) 1982-2010 AT&T Intellectual Property #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# and is licensed under the #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Common Public License, Version 1.0 #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# by AT&T Intellectual Property #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# A copy of the License is available at #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# http://www.opensource.org/licenses/cpl1.0.txt #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Information and Software Systems Research #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# AT&T Research #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Florham Park NJ #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# David Korn <dgk@research.att.com> #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin########################################################################
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfunction err_exit
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin print -u2 -n "\t"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin print -u2 -r ${Command}[$1]: "${@:2}"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin let Errors+=1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinalias err_exit='err_exit $LINENO'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinCommand=${0##*/}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chininteger Errors=0
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; }
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztrap "cd /; rm -rf $tmp" EXIT
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzcd $tmp || exit
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintype /xxxxxx > out1 2> out2
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ -s out1 ]] && err_exit 'type should not write on stdout for not found case'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ -s out2 ]] || err_exit 'type should write on stderr for not found case'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinmkdir dir1 dir2
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chincat > dir1/foobar << '+++'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinfoobar() { print foobar1;}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinfunction dir1 { print dir1;}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin+++
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chincat > dir2/foobar << '+++'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinfoobar() { print foobar2;}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinfunction dir2 { print dir2;}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin+++
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinchmod +x dir[12]/foobar
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinp=$PATH
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinFPATH=$PWD/dir1
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinPATH=$FPATH:$p
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $( foobar) == foobar1 ]] || err_exit 'foobar should output foobar1'
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinFPATH=$PWD/dir2
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinPATH=$FPATH:$p
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $(foobar) == foobar2 ]] || err_exit 'foobar should output foobar2'
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinFPATH=$PWD/dir1
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinPATH=$FPATH:$p
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $(foobar) == foobar1 ]] || err_exit 'foobar should output foobar1 again'
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinFPATH=$PWD/dir2
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinPATH=$FPATH:$p
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${ foobar;} == foobar2 ]] || err_exit 'foobar should output foobar2 with ${}'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${ dir2;} == dir2 ]] || err_exit 'should be dir2'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${ dir1;} == dir1 ]] 2> /dev/null && err_exit 'should not be be dir1'
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinFPATH=$PWD/dir1
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinPATH=$FPATH:$p
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${ foobar;} == foobar1 ]] || err_exit 'foobar should output foobar1 with ${}'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${ dir1;} == dir1 ]] || err_exit 'should be dir1'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${ dir2;} == dir2 ]] 2> /dev/null && err_exit 'should not be be dir2'
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinFPATH=$PWD/dir2
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinPATH=$FPATH:$p
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${ foobar;} == foobar2 ]] || err_exit 'foobar should output foobar2 with ${} again'
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinPATH=$p
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin(PATH="/bin")
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $($SHELL -c 'print -r -- "$PATH"') == "$PATH" ]] || err_exit 'export PATH lost in subshell'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzcat > bug1 <<- EOF
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz print print ok > $tmp/ok
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz /bin/chmod 755 $tmp/ok
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin function a
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset -x PATH=$tmp
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz ok
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz path=\$PATH
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unset PATH
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin a
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz PATH=\$path
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEOF
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $($SHELL ./bug1 2>/dev/null) == ok ]] || err_exit "PATH in function not working"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincat > bug1 <<- \EOF
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin function lock_unlock
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typeset PATH=/usr/bin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typeset -x PATH=''
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin PATH=/usr/bin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin : $(PATH=/usr/bin getconf PATH)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typeset -ft lock_unlock
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin lock_unlock
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEOF
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin($SHELL ./bug1) 2> /dev/null || err_exit "path_delete bug"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzmkdir tdir
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzif $SHELL tdir > /dev/null 2>&1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'not an error to run ksh on a directory'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinprint 'print hi' > ls
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $($SHELL ls 2> /dev/null) != hi ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit "$SHELL name not executing version in current directory"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(ls -d . 2>/dev/null) == . && $(PATH=/bin:/usr/bin:$PATH ls -d . 2>/dev/null) != . ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'PATH export in command substitution not working'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinpwd=$PWD
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# get rid of leading and trailing : and trailing :.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=${PATH%.}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=${PATH%:}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=${PATH#.}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=${PATH#:}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinpath=$PATH
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinvar=$(whence date)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chindir=$(basename "$var")
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfor i in 1 2 3 4 5 6 7 8 9 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chindo if ! whence notfound$i 2> /dev/null
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz then cmd=notfound$i
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chindone
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinprint 'print hello' > date
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinchmod +x date
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinprint 'print notfound' > $cmd
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinchmod +x "$cmd"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin> foo
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinchmod 755 foo
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfor PATH in $path :$path $path: .:$path $path: $path:. $PWD::$path $PWD:.:$path $path:$PWD $path:.:$PWD
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzdo
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# print path=$PATH $(whence date)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# print path=$PATH $(whence "$cmd")
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin date
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "$cmd"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chindone > /dev/null 2>&1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinbuiltin -d date 2> /dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(PATH=:/usr/bin; date) != 'hello' ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit "leading : in path not working"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin(
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin PATH=$PWD:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin builtin chmod
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin print 'print cannot execute' > noexec
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin chmod 644 noexec
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if [[ ! -x noexec ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then noexec > /dev/null 2>&1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else exit 126
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatus=$?
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $status == 126 ]] || err_exit "exit status of non-executable is $status -- 126 expected"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinbuiltin -d rm 2> /dev/null
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzchmod=$(whence chmod)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinrm=$(whence rm)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chind=$(dirname "$rm")
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzchmod=$(whence chmod)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzfor cmd in date foo
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzdo exp="$cmd found"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz print print $exp > $cmd
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz $chmod +x $cmd
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz got=$($SHELL -c "unset FPATH; PATH=/dev/null; $cmd" 2>&1)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz [[ $got == $exp ]] && err_exit "$cmd as last command should not find ./$cmd with PATH=/dev/null"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz got=$($SHELL -c "unset FPATH; PATH=/dev/null; $cmd" 2>&1)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz [[ $got == $exp ]] && err_exit "$cmd should not find ./$cmd with PATH=/dev/null"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz exp=$PWD/./$cmd
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz got=$(unset FPATH; PATH=/dev/null; whence ./$cmd)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz [[ $got == $exp ]] || err_exit "whence $cmd should find ./$cmd with PATH=/dev/null"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz exp=$PWD/$cmd
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz got=$(unset FPATH; PATH=/dev/null; whence $PWD/$cmd)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz [[ $got == $exp ]] || err_exit "whence \$PWD/$cmd should find ./$cmd with PATH=/dev/null"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzdone
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzexp=''
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzgot=$($SHELL -c "unset FPATH; PATH=/dev/null; whence ./notfound" 2>&1)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $got == $exp ]] || err_exit "whence ./$cmd failed -- expected '$exp', got '$got'"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzgot=$($SHELL -c "unset FPATH; PATH=/dev/null; whence $PWD/notfound" 2>&1)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $got == $exp ]] || err_exit "whence \$PWD/$cmd failed -- expected '$exp', got '$got'"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinunset FPATH
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=/dev/null
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzfor cmd in date foo
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzdo exp="$cmd found"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz print print $exp > $cmd
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz $chmod +x $cmd
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz got=$($cmd 2>&1)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz [[ $got == $exp ]] && err_exit "$cmd as last command should not find ./$cmd with PATH=/dev/null"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz got=$($cmd 2>&1; :)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz [[ $got == $exp ]] && err_exit "$cmd should not find ./$cmd with PATH=/dev/null"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz exp=$PWD/./$cmd
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz got=$(whence ./$cmd)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz [[ $got == $exp ]] || err_exit "whence ./$cmd should find ./$cmd with PATH=/dev/null"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz exp=$PWD/$cmd
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz got=$(whence $PWD/$cmd)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz [[ $got == $exp ]] || err_exit "whence \$PWD/$cmd should find ./$cmd with PATH=/dev/null"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzdone
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzexp=''
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzgot=$(whence ./notfound)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $got == $exp ]] || err_exit "whence ./$cmd failed -- expected '$exp', got '$got'"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzgot=$(whence $PWD/notfound)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $got == $exp ]] || err_exit "whence \$PWD/$cmd failed -- expected '$exp', got '$got'"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=$d:
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzcp "$rm" kshrm
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzif [[ $(whence kshrm) != $PWD/kshrm ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'trailing : in pathname not working'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincp "$rm" rm
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=:$d
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(whence rm) != $PWD/rm ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'leading : in pathname not working'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=$d: whence rm > /dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(whence rm) != $PWD/rm ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'pathname not restored after scoping'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmkdir bin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinprint 'print ok' > bin/tst
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinchmod +x bin/tst
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(PATH=$PWD/bin tst 2>/dev/null) != ok ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit '(PATH=$PWD/bin foo) does not find $PWD/bin/foo'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincd /
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif whence ls > /dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen PATH=
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if [[ $(whence rm) ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then err_exit 'setting PATH to Null not working'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unset PATH
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if [[ $(whence rm) != /*rm ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then err_exit 'unsetting path not working'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland MainzPATH=/dev:$tmp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinx=$(whence rm)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypeset foo=$(PATH=/xyz:/abc :)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chiny=$(whence rm)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $x != "$y" ]] && err_exit 'PATH not restored after command substitution'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinwhence getconf > /dev/null && err_exit 'getconf should not be found'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinbuiltin /bin/getconf
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=/bin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=$(getconf PATH)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinx=$(whence ls)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=.:$PWD:${x%/ls}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $(whence ls) == "$x" ]] || err_exit 'PATH search bug when .:$PWD in path'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=$PWD:.:${x%/ls}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $(whence ls) == "$x" ]] || err_exit 'PATH search bug when :$PWD:. in path'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincd "${x%/ls}"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $(whence ls) == /* ]] || err_exit 'whence not generating absolute pathname'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzstatus=$($SHELL -c $'trap \'print $?\' EXIT;/xxx/a/b/c/d/e 2> /dev/null')
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $status == 127 ]] || err_exit "not found command exit status $status -- expected 127"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatus=$($SHELL -c $'trap \'print $?\' EXIT;/dev/null 2> /dev/null')
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $status == 126 ]] || err_exit "non executable command exit status $status -- expected 126"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzstatus=$($SHELL -c $'trap \'print $?\' ERR;/xxx/a/b/c/d/e 2> /dev/null')
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $status == 127 ]] || err_exit "not found command with ERR trap exit status $status -- expected 127"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatus=$($SHELL -c $'trap \'print $?\' ERR;/dev/null 2> /dev/null')
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $status == 126 ]] || err_exit "non executable command ERR trap exit status $status -- expected 126"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# universe via PATH
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinbuiltin getconf
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chingetconf UNIVERSE - att # override sticky default 'UNIVERSE = foo'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $(PATH=/usr/ucb/bin:/usr/bin echo -n ucb) == 'ucb' ]] || err_exit "ucb universe echo ignores -n option"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $(PATH=/usr/xpg/bin:/usr/bin echo -n att) == '-n att' ]] || err_exit "att universe echo does not ignore -n option"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April ChinPATH=$path
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzscr=$tmp/script
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinexp=126
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin: > $scr
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinchmod a=x $scr
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin{ got=$($scr; print $?); } 2>/dev/null
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$got" == "$exp" ]] || err_exit "unreadable empty script should fail -- expected $exp, got $got"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin{ got=$(command $scr; print $?); } 2>/dev/null
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$got" == "$exp" ]] || err_exit "command of unreadable empty script should fail -- expected $exp, got $got"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$(:; $scr; print $?)" == "$exp" ]] 2>/dev/null || err_exit "unreadable empty script in [[ ... ]] should fail -- expected $exp"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$(:; command $scr; print $?)" == "$exp" ]] 2>/dev/null || err_exit "command unreadable empty script in [[ ... ]] should fail -- expected $exp"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chingot=$($SHELL -c "$scr; print \$?" 2>/dev/null)
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$got" == "$exp" ]] || err_exit "\$SHELL -c of unreadable empty script should fail -- expected $exp, got" $got
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chingot=$($SHELL -c "command $scr; print \$?" 2>/dev/null)
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$got" == "$exp" ]] || err_exit "\$SHELL -c of command of unreadable empty script should fail -- expected $exp, got" $got
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinrm -f $scr
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinprint : > $scr
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinchmod a=x $scr
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin{ got=$($scr; print $?); } 2>/dev/null
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$got" == "$exp" ]] || err_exit "unreadable non-empty script should fail -- expected $exp, got $got"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin{ got=$(command $scr; print $?); } 2>/dev/null
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$got" == "$exp" ]] || err_exit "command of unreadable non-empty script should fail -- expected $exp, got $got"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$(:; $scr; print $?)" == "$exp" ]] 2>/dev/null || err_exit "unreadable non-empty script in [[ ... ]] should fail -- expected $exp"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$(:; command $scr; print $?)" == "$exp" ]] 2>/dev/null || err_exit "command unreadable non-empty script in [[ ... ]] should fail -- expected $exp"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chingot=$($SHELL -c "$scr; print \$?" 2>/dev/null)
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$got" == "$exp" ]] || err_exit "\$SHELL -c of unreadable non-empty script should fail -- expected $exp, got" $got
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chingot=$($SHELL -c "command $scr; print \$?" 2>/dev/null)
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$got" == "$exp" ]] || err_exit "\$SHELL -c of command of unreadable non-empty script should fail -- expected $exp, got" $got
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinexit $((Errors))