|
Packit Service |
a8c26c |
########################################################################
|
|
Packit Service |
a8c26c |
# #
|
|
Packit Service |
a8c26c |
# This software is part of the ast package #
|
|
Packit Service |
a8c26c |
# Copyright (c) 1982-2012 AT&T Intellectual Property #
|
|
Packit Service |
a8c26c |
# and is licensed under the #
|
|
Packit Service |
a8c26c |
# Eclipse Public License, Version 1.0 #
|
|
Packit Service |
a8c26c |
# by AT&T Intellectual Property #
|
|
Packit Service |
a8c26c |
# #
|
|
Packit Service |
a8c26c |
# A copy of the License is available at #
|
|
Packit Service |
a8c26c |
# http://www.eclipse.org/org/documents/epl-v10.html #
|
|
Packit Service |
a8c26c |
# (with md5 checksum b35adb5213ca9657e911e9befb180842) #
|
|
Packit Service |
a8c26c |
# #
|
|
Packit Service |
a8c26c |
# Information and Software Systems Research #
|
|
Packit Service |
a8c26c |
# AT&T Research #
|
|
Packit Service |
a8c26c |
# Florham Park NJ #
|
|
Packit Service |
a8c26c |
# #
|
|
Packit Service |
a8c26c |
# David Korn <dgk@research.att.com> #
|
|
Packit Service |
a8c26c |
# #
|
|
Packit Service |
a8c26c |
########################################################################
|
|
Packit Service |
a8c26c |
function err_exit
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print -u2 -n "\t"
|
|
Packit Service |
a8c26c |
print -u2 -r ${Command}[$1]: "${@:2}"
|
|
Packit Service |
a8c26c |
let Errors+=1
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
alias err_exit='err_exit $LINENO'
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
integer Errors=0
|
|
Packit Service |
a8c26c |
Command=${0##*/}
|
|
Packit Service |
a8c26c |
compiled=''
|
|
Packit Service |
a8c26c |
read -n4 c < $0 2> /dev/null
|
|
Packit Service |
a8c26c |
[[ $c == *$'\ck'* ]] && compiled=1
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
ulimit -c 0
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
tmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; }
|
|
Packit Service |
a8c26c |
trap "cd /; rm -rf $tmp" EXIT
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
integer foo=33
|
|
Packit Service |
a8c26c |
bar=bye
|
|
Packit Service |
a8c26c |
# check for global variables and $0
|
|
Packit Service |
a8c26c |
function foobar
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
case $1 in
|
|
Packit Service |
a8c26c |
1) print -r - "$foo" "$bar";;
|
|
Packit Service |
a8c26c |
2) print -r - "$0";;
|
|
Packit Service |
a8c26c |
3) typeset foo=foo
|
|
Packit Service |
a8c26c |
integer bar=10
|
|
Packit Service |
a8c26c |
print -r - "$foo" "$bar";;
|
|
Packit Service |
a8c26c |
4) trap 'foo=36' EXIT
|
|
Packit Service |
a8c26c |
typeset foo=20;;
|
|
Packit Service |
a8c26c |
esac
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
function print
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
command print hi
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
if [[ $(print) != hi ]]
|
|
Packit Service |
a8c26c |
then err_exit "command print not working inside print function"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
unset -f print
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
if [[ $(foobar 1) != '33 bye' ]]
|
|
Packit Service |
a8c26c |
then err_exit 'global variables not correct'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
if [[ $(foobar 2) != 'foobar' ]]
|
|
Packit Service |
a8c26c |
then err_exit '$0 not correct'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
if [[ $(bar=foo foobar 1) != '33 foo' ]]
|
|
Packit Service |
a8c26c |
then err_exit 'environment override not correct'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
if [[ $bar == foo ]]
|
|
Packit Service |
a8c26c |
then err_exit 'scoping error'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
if [[ $(foobar 3) != 'foo 10' ]]
|
|
Packit Service |
a8c26c |
then err_exit non-local variables
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
foobar 4
|
|
Packit Service |
a8c26c |
if [[ $foo != 36 ]]
|
|
Packit Service |
a8c26c |
then err_exit EXIT trap in wrong scope
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
unset -f foobar || err_exit "cannot unset function foobar"
|
|
Packit Service |
a8c26c |
typeset -f foobar>/dev/null && err_exit "typeset -f has incorrect exit status"
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
function foobar
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
(return 0)
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
> $tmp/test1
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
foobar
|
|
Packit Service |
a8c26c |
if [ -r $tmp/test1 ]
|
|
Packit Service |
a8c26c |
then rm -r $tmp/test1
|
|
Packit Service |
a8c26c |
else err_exit 'return within subshell inside function error'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
abc() print hi
|
|
Packit Service |
a8c26c |
if [[ $(abc) != hi ]]
|
|
Packit Service |
a8c26c |
then err_exit 'abc() print hi not working'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
( unset -f abc )
|
|
Packit Service |
a8c26c |
if [[ $(abc 2>/dev/null) != hi ]]
|
|
Packit Service |
a8c26c |
then err_exit 'abc() print hi not working after subshell unset'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
(
|
|
Packit Service |
a8c26c |
function f
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
exit 1
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
f
|
|
Packit Service |
a8c26c |
err_exit 'exit from function not working'
|
|
Packit Service |
a8c26c |
)
|
|
Packit Service |
a8c26c |
unset -f foo
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
x=2
|
|
Packit Service |
a8c26c |
(
|
|
Packit Service |
a8c26c |
x=3
|
|
Packit Service |
a8c26c |
cd $tmp
|
|
Packit Service |
a8c26c |
print bar
|
|
Packit Service |
a8c26c |
)
|
|
Packit Service |
a8c26c |
if [[ $x != 2 ]]
|
|
Packit Service |
a8c26c |
then err_exit 'value of x not restored after subshell inside function'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
x=1
|
|
Packit Service |
a8c26c |
dir=$PWD
|
|
Packit Service |
a8c26c |
if [[ $(foo) != bar ]]
|
|
Packit Service |
a8c26c |
then err_exit 'cd inside nested subshell not working'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
if [[ $PWD != "$dir" ]]
|
|
Packit Service |
a8c26c |
then err_exit 'cd inside nested subshell changes $PWD'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
fun() /bin/echo hello
|
|
Packit Service |
a8c26c |
if [[ $(fun) != hello ]]
|
|
Packit Service |
a8c26c |
then err_exit one line functions not working
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
cat > $tmp/script <<-\!
|
|
Packit Service |
a8c26c |
print -r -- "$1"
|
|
Packit Service |
a8c26c |
!
|
|
Packit Service |
a8c26c |
chmod +x $tmp/script
|
|
Packit Service |
a8c26c |
function passargs
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
$tmp/script "$@"
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
if [[ $(passargs one) != one ]]
|
|
Packit Service |
a8c26c |
then err_exit 'passing args from functions to scripts not working'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
cat > $tmp/script <<-\!
|
|
Packit Service |
a8c26c |
trap 'exit 0' EXIT
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
/tmp > /dev/null 2>&1
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
foo
|
|
Packit Service |
a8c26c |
!
|
|
Packit Service |
a8c26c |
if ! $tmp/script
|
|
Packit Service |
a8c26c |
then err_exit 'exit trap incorrectly triggered'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
if ! $SHELL -c $tmp/script
|
|
Packit Service |
a8c26c |
then err_exit 'exit trap incorrectly triggered when invoked with -c'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
$SHELL -c "trap 'rm $tmp/script' EXIT"
|
|
Packit Service |
a8c26c |
if [[ -f $tmp/script ]]
|
|
Packit Service |
a8c26c |
then err_exit 'exit trap not triggered when invoked with -c'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
cat > $tmp/script <<- \EOF
|
|
Packit Service |
a8c26c |
foobar()
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
return
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
shift
|
|
Packit Service |
a8c26c |
foobar
|
|
Packit Service |
a8c26c |
print -r -- "$1"
|
|
Packit Service |
a8c26c |
EOF
|
|
Packit Service |
a8c26c |
chmod +x $tmp/script
|
|
Packit Service |
a8c26c |
if [[ $( $SHELL $tmp/script arg1 arg2) != arg2 ]]
|
|
Packit Service |
a8c26c |
then err_exit 'arguments not restored by posix functions'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print hello
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
(
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print bar
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
if [[ $(foo) != bar ]]
|
|
Packit Service |
a8c26c |
then err_exit 'function definitions inside subshells not working'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
)
|
|
Packit Service |
a8c26c |
if [[ $(foo) != hello ]]
|
|
Packit Service |
a8c26c |
then err_exit 'function definitions inside subshells not restored'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
unset -f foo bar
|
|
Packit Service |
a8c26c |
function bar
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print "$y"
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset x=3
|
|
Packit Service |
a8c26c |
y=$x bar
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
x=1
|
|
Packit Service |
a8c26c |
if [[ $(foo) != 3 ]]
|
|
Packit Service |
a8c26c |
then err_exit 'variable assignment list not using parent scope'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
unset -f foobar
|
|
Packit Service |
a8c26c |
cat > $tmp/foobar <
|
|
Packit Service |
a8c26c |
function foobar
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print foo
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
!
|
|
Packit Service |
a8c26c |
chmod +x $tmp/foobar
|
|
Packit Service |
a8c26c |
FPATH=$tmp
|
|
Packit Service |
a8c26c |
autoload foobar
|
|
Packit Service |
a8c26c |
if [[ $(foobar 2>/dev/null) != foo ]]
|
|
Packit Service |
a8c26c |
then err_exit 'autoload not working'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
unset -f foobar
|
|
Packit Service |
a8c26c |
function foobar
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset -r x=3
|
|
Packit Service |
a8c26c |
return 0
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
( foobar ) 2> /dev/null || err_exit "cannot unset readonly variable in function"
|
|
Packit Service |
a8c26c |
if $SHELL -n 2> /dev/null <<-!
|
|
Packit Service |
a8c26c |
abc()
|
|
Packit Service |
a8c26c |
!
|
|
Packit Service |
a8c26c |
then err_exit 'abc() without a function body is not a syntax error'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
function winpath
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
usage='q pathname ...'
|
|
Packit Service |
a8c26c |
typeset var format=s
|
|
Packit Service |
a8c26c |
while getopts "$usage" var
|
|
Packit Service |
a8c26c |
do case $var in
|
|
Packit Service |
a8c26c |
q) format=q;;
|
|
Packit Service |
a8c26c |
esac
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
print done
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
if [[ $( (winpath --man 2>/dev/null); print ok) != ok ]]
|
|
Packit Service |
a8c26c |
then err_exit 'getopts --man in functions not working'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
if [[ $( (winpath -z 2>/dev/null); print ok) != ok ]]
|
|
Packit Service |
a8c26c |
then err_exit 'getopts with bad option in functions not working'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
unset -f x
|
|
Packit Service |
a8c26c |
function x
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print "$@"
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
typeset -ft x
|
|
Packit Service |
a8c26c |
if [[ $(x x=y 2>/dev/null) != x=y ]]
|
|
Packit Service |
a8c26c |
then err_exit 'name=value pair args not passed to traced functions'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
function bad
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
false
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
trap 'val=false' ERR
|
|
Packit Service |
a8c26c |
val=true
|
|
Packit Service |
a8c26c |
bad
|
|
Packit Service |
a8c26c |
if [[ $val != false ]]
|
|
Packit Service |
a8c26c |
then err_exit 'set -e not working for functions'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
function bad
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
false
|
|
Packit Service |
a8c26c |
return 0
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
val=true
|
|
Packit Service |
a8c26c |
bad
|
|
Packit Service |
a8c26c |
if [[ $val != true ]]
|
|
Packit Service |
a8c26c |
then err_exit 'set -e not disabled for functions'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
bad()
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
false
|
|
Packit Service |
a8c26c |
return 0
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
val=true
|
|
Packit Service |
a8c26c |
bad
|
|
Packit Service |
a8c26c |
if [[ $val != false ]]
|
|
Packit Service |
a8c26c |
then err_exit 'set -e not inherited for posix functions'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
trap - ERR
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
function myexport
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
nameref var=$1
|
|
Packit Service |
a8c26c |
if (( $# > 1 ))
|
|
Packit Service |
a8c26c |
then export $1=$2
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
if (( $# > 2 ))
|
|
Packit Service |
a8c26c |
then print $(myexport "$1" "$3" )
|
|
Packit Service |
a8c26c |
return
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
typeset val
|
|
Packit Service |
a8c26c |
val=$(export | grep "^$1=")
|
|
Packit Service |
a8c26c |
print ${val#"$1="}
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
export dgk=base
|
|
Packit Service |
a8c26c |
val=$(myexport dgk fun)
|
|
Packit Service |
a8c26c |
if [[ $val != fun ]]
|
|
Packit Service |
a8c26c |
then err_exit "export inside function not working -- expected 'fun', got '$val'"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
val=$(export | sed -e '/^dgk=/!d' -e 's/^dgk=//')
|
|
Packit Service |
a8c26c |
if [[ $val != base ]]
|
|
Packit Service |
a8c26c |
then err_exit "export not restored after function call -- expected 'base', got '$val'"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
val=$(myexport dgk fun fun2)
|
|
Packit Service |
a8c26c |
if [[ $val != fun2 ]]
|
|
Packit Service |
a8c26c |
then err_exit "export inside function not working with recursive function -- expected 'fun2', got '$val'"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
val=$(export | sed -e '/^dgk=/!d' -e 's/^dgk=//')
|
|
Packit Service |
a8c26c |
if [[ $val != base ]]
|
|
Packit Service |
a8c26c |
then err_exit "export not restored after recursive function call -- expected 'base', got '$val'"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
val=$(dgk=try3 myexport dgk)
|
|
Packit Service |
a8c26c |
if [[ $val != try3 ]]
|
|
Packit Service |
a8c26c |
then err_exit "name=value not added to export list with function call -- expected 'try3', got '$val'"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
val=$(export | sed -e '/^dgk=/!d' -e 's/^dgk=//')
|
|
Packit Service |
a8c26c |
if [[ $val != base ]]
|
|
Packit Service |
a8c26c |
then err_exit "export not restored name=value function call -- expected 'base', got '$val'"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
unset zzz
|
|
Packit Service |
a8c26c |
val=$(myexport zzz fun)
|
|
Packit Service |
a8c26c |
if [[ $val != fun ]]
|
|
Packit Service |
a8c26c |
then err_exit "export inside function not working -- expected 'fun', got '$val'"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
val=$(export | sed -e '/^zzz=/!d' -e 's/^zzz=//')
|
|
Packit Service |
a8c26c |
if [[ $val ]]
|
|
Packit Service |
a8c26c |
then err_exit "unset varaible exported after function call -- expected '', got '$val'"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
unset zzz
|
|
Packit Service |
a8c26c |
typeset -u zzz
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
zzz=abc
|
|
Packit Service |
a8c26c |
print $zzz
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
if [[ $(foo)$(foo) != ABCABC ]]
|
|
Packit Service |
a8c26c |
then err_exit 'attributes on unset variables not saved/restored'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
function xpd {
|
|
Packit Service |
a8c26c |
typeset i j=$1
|
|
Packit Service |
a8c26c |
for i
|
|
Packit Service |
a8c26c |
do print i=$i j=$j
|
|
Packit Service |
a8c26c |
[[ $i == a ]] && xpd b
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
if [[ $(xpd a c) != $'i=a j=a\ni=b j=b\ni=c j=a' ]]
|
|
Packit Service |
a8c26c |
then err_exit 'for loop function optimization error'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
typeset -A visited
|
|
Packit Service |
a8c26c |
integer level=0
|
|
Packit Service |
a8c26c |
function closure
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
(( $# > 5 )) && return 1
|
|
Packit Service |
a8c26c |
((level < 2)) && ((level++))
|
|
Packit Service |
a8c26c |
typeset tmp r=0
|
|
Packit Service |
a8c26c |
visited[$1]=1
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
for tmp in $level _$level
|
|
Packit Service |
a8c26c |
do
|
|
Packit Service |
a8c26c |
[[ ${visited[$tmp]} == 1 ]] && continue
|
|
Packit Service |
a8c26c |
closure $tmp $* || r=1
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
return $r
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
closure 0 || err_exit -u2 'for loop function optimization bug2'
|
|
Packit Service |
a8c26c |
dir=$tmp/dir
|
|
Packit Service |
a8c26c |
mkdir $dir
|
|
Packit Service |
a8c26c |
cd $dir || { err_exit "cd $dir failed"; exit 1; }
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
(
|
|
Packit Service |
a8c26c |
function a {
|
|
Packit Service |
a8c26c |
print a
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
function b {
|
|
Packit Service |
a8c26c |
print 1
|
|
Packit Service |
a8c26c |
a
|
|
Packit Service |
a8c26c |
print 2
|
|
Packit Service |
a8c26c |
} > /dev/null
|
|
Packit Service |
a8c26c |
typeset -ft a b
|
|
Packit Service |
a8c26c |
PS4=X
|
|
Packit Service |
a8c26c |
b
|
|
Packit Service |
a8c26c |
) > file 2>&1
|
|
Packit Service |
a8c26c |
[[ $(
|
|
Packit Service |
a8c26c |
rm -f file
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
print 'false' > try
|
|
Packit Service |
a8c26c |
chmod +x try
|
|
Packit Service |
a8c26c |
cat > tst <<- EOF
|
|
Packit Service |
a8c26c |
function ignore
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
./try
|
|
Packit Service |
a8c26c |
return 0
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
trap "print error; exit 1" ERR
|
|
Packit Service |
a8c26c |
ignore
|
|
Packit Service |
a8c26c |
EOF
|
|
Packit Service |
a8c26c |
if [[ $($SHELL < tst) == error ]]
|
|
Packit Service |
a8c26c |
then err_exit 'ERR trap not cleared'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
FPATH=$dir
|
|
Packit Service |
a8c26c |
print ': This does nothing' > foobar
|
|
Packit Service |
a8c26c |
chmod +x foobar
|
|
Packit Service |
a8c26c |
unset -f foobar
|
|
Packit Service |
a8c26c |
{ foobar; } 2>/dev/null
|
|
Packit Service |
a8c26c |
got=$?
|
|
Packit Service |
a8c26c |
exp=126
|
|
Packit Service |
a8c26c |
if [[ $got != $exp ]]
|
|
Packit Service |
a8c26c |
then err_exit "function file without function definition processes wrong error -- expected '$exp', got '$got'"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
print 'set a b c' > dotscript
|
|
Packit Service |
a8c26c |
[[ $(PATH=$PATH: $SHELL -c '. dotscript;print $#') == 3 ]] || err_exit 'positional parameters not preserved with . script without arguments'
|
|
Packit Service |
a8c26c |
cd ~- || err_exit "cd back failed"
|
|
Packit Service |
a8c26c |
function errcheck
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
trap 'print ERR; return 1' ERR
|
|
Packit Service |
a8c26c |
false
|
|
Packit Service |
a8c26c |
print ok
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
err=$(errcheck)
|
|
Packit Service |
a8c26c |
[[ $err == ERR ]] || err_exit 'trap on ERR not working in a function'
|
|
Packit Service |
a8c26c |
x="$(
|
|
Packit Service |
a8c26c |
function foobar
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print ok
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
typeset -f foobar
|
|
Packit Service |
a8c26c |
)"
|
|
Packit Service |
a8c26c |
eval "$x" || err_exit 'typeset -f generates syntax error'
|
|
Packit Service |
a8c26c |
[[ $(foobar) != ok ]] && err_exit 'typeset -f not generating function'
|
|
Packit Service |
a8c26c |
unset -f a b c
|
|
Packit Service |
a8c26c |
a()
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
b
|
|
Packit Service |
a8c26c |
b
|
|
Packit Service |
a8c26c |
print ${.sh.fun}
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
b() { : ;}
|
|
Packit Service |
a8c26c |
[[ $(a) == a ]] || err_exit '.sh.fun not set correctly in a function'
|
|
Packit Service |
a8c26c |
print $'a(){\ndate\n}' | $SHELL 2> /dev/null || err_exit 'parser error in a(){;date;}'
|
|
Packit Service |
a8c26c |
cat > $tmp/data1 << '++EOF'
|
|
Packit Service |
a8c26c |
1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
3 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
8 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
9 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
10 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
11 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
12 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
13 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
14 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
15 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
16 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
17 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
18 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
19 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
20 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
++EOF
|
|
Packit Service |
a8c26c |
cat > $tmp/script << '++EOF'
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
f()
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
cat <<\M
|
|
Packit Service |
a8c26c |
++EOF
|
|
Packit Service |
a8c26c |
cat $tmp/data1 >> $tmp/script
|
|
Packit Service |
a8c26c |
printf 'M\n}\n\nf\n\n' >> $tmp/script
|
|
Packit Service |
a8c26c |
$SHELL -c $tmp/script > $tmp/data2
|
|
Packit Service |
a8c26c |
cmp -s $tmp/data[12] || err_exit 'error with long functions'
|
|
Packit Service |
a8c26c |
v=1
|
|
Packit Service |
a8c26c |
function f
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset i
|
|
Packit Service |
a8c26c |
for i in 0 1
|
|
Packit Service |
a8c26c |
do typeset v
|
|
Packit Service |
a8c26c |
v=$i
|
|
Packit Service |
a8c26c |
[[ $v == $i ]] || return 1
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
f || err_exit "typeset optimization bug"
|
|
Packit Service |
a8c26c |
function f
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print -r -- "$foo$bar"
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
function g
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print -r -- $(bar=bam f)
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
unset foo bar
|
|
Packit Service |
a8c26c |
[[ $(foo=hello g) == hellobam ]] || err_exit 'function exports not passed on'
|
|
Packit Service |
a8c26c |
[[ $(bar=hello g) == bam ]] || err_exit 'function exports not overridden'
|
|
Packit Service |
a8c26c |
unset -f foo
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset line=$1
|
|
Packit Service |
a8c26c |
set +n
|
|
Packit Service |
a8c26c |
while [[ $line ]]
|
|
Packit Service |
a8c26c |
do if [[ ! $varname ]]
|
|
Packit Service |
a8c26c |
then varname=${line%% *}
|
|
Packit Service |
a8c26c |
line=${line##"$varname"?( )}
|
|
Packit Service |
a8c26c |
[[ $line ]] && continue
|
|
Packit Service |
a8c26c |
else print ok
|
|
Packit Service |
a8c26c |
return
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
varname=
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
[[ $(foo 'NUMBERED RECORDSIZE') == ok ]] || err_exit 'optimization error with undefined variable'
|
|
Packit Service |
a8c26c |
unset x
|
|
Packit Service |
a8c26c |
x=$(
|
|
Packit Service |
a8c26c |
set -e
|
|
Packit Service |
a8c26c |
integer count=0
|
|
Packit Service |
a8c26c |
function err_f
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
if ((count++==3))
|
|
Packit Service |
a8c26c |
then print failed
|
|
Packit Service |
a8c26c |
else false
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
trap 'err_f' ERR
|
|
Packit Service |
a8c26c |
false
|
|
Packit Service |
a8c26c |
)
|
|
Packit Service |
a8c26c |
[[ $x == failed ]] && err_exit 'ERR trap executed multiple times'
|
|
Packit Service |
a8c26c |
export environment
|
|
Packit Service |
a8c26c |
typeset global
|
|
Packit Service |
a8c26c |
function f
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset i t local
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
for i
|
|
Packit Service |
a8c26c |
do case $i in
|
|
Packit Service |
a8c26c |
[-+]*) set "$@"
|
|
Packit Service |
a8c26c |
continue
|
|
Packit Service |
a8c26c |
;;
|
|
Packit Service |
a8c26c |
local) local=f
|
|
Packit Service |
a8c26c |
t=$(typeset +f $local)
|
|
Packit Service |
a8c26c |
;;
|
|
Packit Service |
a8c26c |
global) global=f
|
|
Packit Service |
a8c26c |
t=$(typeset +f $global)
|
|
Packit Service |
a8c26c |
;;
|
|
Packit Service |
a8c26c |
environment)
|
|
Packit Service |
a8c26c |
environment=f
|
|
Packit Service |
a8c26c |
t=$(typeset +f $environment)
|
|
Packit Service |
a8c26c |
;;
|
|
Packit Service |
a8c26c |
literal)t=$(typeset +f f)
|
|
Packit Service |
a8c26c |
;;
|
|
Packit Service |
a8c26c |
positional)
|
|
Packit Service |
a8c26c |
set -- f
|
|
Packit Service |
a8c26c |
t=$(typeset +f $1)
|
|
Packit Service |
a8c26c |
;;
|
|
Packit Service |
a8c26c |
esac
|
|
Packit Service |
a8c26c |
[[ $t ]] || err_exit "typeset +f \$$i failed"
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
f local global environment literal positional
|
|
Packit Service |
a8c26c |
$SHELL -c '
|
|
Packit Service |
a8c26c |
print exit 0 > '$tmp'/script
|
|
Packit Service |
a8c26c |
chmod +x '$tmp'/script
|
|
Packit Service |
a8c26c |
unset var
|
|
Packit Service |
a8c26c |
var=( ident=1 )
|
|
Packit Service |
a8c26c |
function fun
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
PATH='$tmp' script
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
fun
|
|
Packit Service |
a8c26c |
' || err_exit "compound variable cleanup before script exec failed"
|
|
Packit Service |
a8c26c |
( $SHELL << \++EOF++
|
|
Packit Service |
a8c26c |
function main
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset key
|
|
Packit Service |
a8c26c |
typeset -A entry
|
|
Packit Service |
a8c26c |
entry[a]=( value=aaa )
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
main
|
|
Packit Service |
a8c26c |
++EOF++
|
|
Packit Service |
a8c26c |
) 2> /dev/null || err_exit 'function main fails'
|
|
Packit Service |
a8c26c |
optind=$OPTIND
|
|
Packit Service |
a8c26c |
sub()
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
(
|
|
Packit Service |
a8c26c |
OPTIND=1
|
|
Packit Service |
a8c26c |
while getopts :abc OPTION "$@"
|
|
Packit Service |
a8c26c |
do print OPTIND=$OPTIND
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
)
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
[[ $(sub -a) == OPTIND=2 ]] || err_exit 'OPTIND should be 2'
|
|
Packit Service |
a8c26c |
[[ $(sub -a) == OPTIND=2 ]] || err_exit 'OPTIND should be 2 again'
|
|
Packit Service |
a8c26c |
[[ $OPTIND == "$optind" ]] || err_exit 'OPTIND should be 1'
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
function bar
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
[[ -o nounset ]] && err_exit 'nounset option should not be inherited'
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
set -o nounset
|
|
Packit Service |
a8c26c |
bar
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
set +o nounset
|
|
Packit Service |
a8c26c |
foo
|
|
Packit Service |
a8c26c |
function red
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
integer -S d=0
|
|
Packit Service |
a8c26c |
printf 'red_one %d\n' d
|
|
Packit Service |
a8c26c |
(( d++ ))
|
|
Packit Service |
a8c26c |
return 0
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
[[ ${ red } != 'red_one 0' ]] && err_exit 'expected red_one 0'
|
|
Packit Service |
a8c26c |
[[ ${ red } != 'red_one 1' ]] && err_exit 'expected red_one 1'
|
|
Packit Service |
a8c26c |
xyz=$0
|
|
Packit Service |
a8c26c |
function traceback
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
integer .level=.sh.level
|
|
Packit Service |
a8c26c |
while((--.level>=0))
|
|
Packit Service |
a8c26c |
do
|
|
Packit Service |
a8c26c |
((.sh.level = .level))
|
|
Packit Service |
a8c26c |
[[ $xyz == "$0" ]] || err_exit "\$xyz=$xyz does not match $0 on level ${.level}"
|
|
Packit Service |
a8c26c |
[[ ${.sh.lineno} == "$1" ]] || err_exit "\${.sh.lineno}=${.sh.lineno} does not match $1 on level ${.level}"
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset xyz=foo
|
|
Packit Service |
a8c26c |
set -- $((LINENO+1))
|
|
Packit Service |
a8c26c |
bar $LINENO "$1"
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
function bar
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset xyz=bar
|
|
Packit Service |
a8c26c |
set -- $((LINENO+2))
|
|
Packit Service |
a8c26c |
trap 'traceback $LINENO' DEBUG
|
|
Packit Service |
a8c26c |
: $LINENO "$1"
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
set -- $((LINENO+1))
|
|
Packit Service |
a8c26c |
foo $LINENO
|
|
Packit Service |
a8c26c |
function .sh.fun.set
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print -r -- "${.sh.value}"
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
function abc
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
:
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
def()
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
:
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
[[ $(abc) == abc ]] || err_exit '.sh.fun.set not capturing function name'
|
|
Packit Service |
a8c26c |
[[ $(def) == def ]] || err_exit '.sh.fun.set not capturing name()'
|
|
Packit Service |
a8c26c |
unset -f .sh.fun.set
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
# tests for debug functions
|
|
Packit Service |
a8c26c |
basefile=${.sh.file}
|
|
Packit Service |
a8c26c |
integer baseline
|
|
Packit Service |
a8c26c |
cat > $tmp/debug << \+++
|
|
Packit Service |
a8c26c |
: line 1
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
: line 3
|
|
Packit Service |
a8c26c |
+++
|
|
Packit Service |
a8c26c |
# Print one line in a call stack
|
|
Packit Service |
a8c26c |
function _Dbg_print_frame
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset -i pos=$1
|
|
Packit Service |
a8c26c |
typeset fn=$2
|
|
Packit Service |
a8c26c |
typeset filename="$3"
|
|
Packit Service |
a8c26c |
typeset -i line=$4
|
|
Packit Service |
a8c26c |
typeset arg=$5
|
|
Packit Service |
a8c26c |
shift 5
|
|
Packit Service |
a8c26c |
if ((pos==0))
|
|
Packit Service |
a8c26c |
then [[ $filename == "$basefile" ]] || err_exit "filename for level 0 is $filename not $basename"
|
|
Packit Service |
a8c26c |
[[ $arg == DEBUG ]] && ((baseline++))
|
|
Packit Service |
a8c26c |
[[ $line == "$baseline" ]] || err_exit "line number for level 0 is $line not $baseline"
|
|
Packit Service |
a8c26c |
elif ((pos==1))
|
|
Packit Service |
a8c26c |
then [[ $filename == "$tmp/debug" ]] || err_exit "filename for level 1 is $filename not $tmp/debug"
|
|
Packit Service |
a8c26c |
[[ $* == 'foo bar' ]] || err_exit "args are '$*', not 'foo bar'"
|
|
Packit Service |
a8c26c |
[[ $line == $arg ]] || err_exit "line number for level 1 is $line not $arg"
|
|
Packit Service |
a8c26c |
else err_exit "level should be 0 or 1 but is $pos"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
function _Dbg_debug_trap_handler
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
integer .level=.sh.level .max=.sh.level-1
|
|
Packit Service |
a8c26c |
while((--.level>=0))
|
|
Packit Service |
a8c26c |
do
|
|
Packit Service |
a8c26c |
((.sh.level = .level))
|
|
Packit Service |
a8c26c |
_Dbg_print_frame "${.level}" "$0" "${.sh.file}" "${.sh.lineno}" "${.sh.command##* }" "$@"
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
((baseline=LINENO+2))
|
|
Packit Service |
a8c26c |
trap '_Dbg_debug_trap_handler' DEBUG
|
|
Packit Service |
a8c26c |
. $tmp/debug foo bar
|
|
Packit Service |
a8c26c |
trap '' DEBUG
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
caller() {
|
|
Packit Service |
a8c26c |
integer .level=.sh.level .max=.sh.level-1
|
|
Packit Service |
a8c26c |
while((--.level>=0))
|
|
Packit Service |
a8c26c |
do
|
|
Packit Service |
a8c26c |
((.sh.level = .level))
|
|
Packit Service |
a8c26c |
print -r -- "${.sh.lineno}"
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
bar() { caller;}
|
|
Packit Service |
a8c26c |
set -- $(bar)
|
|
Packit Service |
a8c26c |
[[ $1 == $2 ]] && err_exit ".sh.inline optimization bug"
|
|
Packit Service |
a8c26c |
( $SHELL -c ' function foo { typeset x=$1;print $1;};z=();z=($(foo bar)) ') 2> /dev/null || err_exit 'using a function to set an array in a command sub fails'
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
got=$(
|
|
Packit Service |
a8c26c |
s=$(ulimit -s)
|
|
Packit Service |
a8c26c |
if [[ $s == +([[:digit:]]) ]] && (( s < 16384 ))
|
|
Packit Service |
a8c26c |
then ulimit -s 16384 2>/dev/null
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
$SHELL << \+++
|
|
Packit Service |
a8c26c |
f()
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
if (($1>1))
|
|
Packit Service |
a8c26c |
then x=$(f $(($1-1))) || exit 1
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
return 0
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
f 257 && print ok
|
|
Packit Service |
a8c26c |
+++
|
|
Packit Service |
a8c26c |
)
|
|
Packit Service |
a8c26c |
} 2>/dev/null
|
|
Packit Service |
a8c26c |
[[ $got == ok ]] || err_exit 'cannot handle comsub depth > 256 in function'
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
tmp1=$tmp/job.1
|
|
Packit Service |
a8c26c |
tmp2=$tmp/job.2
|
|
Packit Service |
a8c26c |
cat > $tmp1 << +++
|
|
Packit Service |
a8c26c |
#! $SHELL
|
|
Packit Service |
a8c26c |
print \$\$
|
|
Packit Service |
a8c26c |
+++
|
|
Packit Service |
a8c26c |
chmod +x $tmp1
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset pid
|
|
Packit Service |
a8c26c |
$tmp1 > $tmp2 & pid=$!
|
|
Packit Service |
a8c26c |
wait $!
|
|
Packit Service |
a8c26c |
[[ $(< $tmp2) == $pid ]] || err_exit 'wrong pid for & job in function'
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
foo
|
|
Packit Service |
a8c26c |
# make sure compiled functions work
|
|
Packit Service |
a8c26c |
[[ $(tmp=$tmp $SHELL <<- \++++
|
|
Packit Service |
a8c26c |
cat > $tmp/functions <<- \EOF
|
|
Packit Service |
a8c26c |
function bar
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print foo
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
function foobar
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
bar
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
EOF
|
|
Packit Service |
a8c26c |
${SHCOMP:-${SHELL%/*}/shcomp} $tmp/functions > $tmp/foobar
|
|
Packit Service |
a8c26c |
rm -f "$tmp/functions"
|
|
Packit Service |
a8c26c |
chmod +x $tmp/foobar
|
|
Packit Service |
a8c26c |
rm $tmp/!(dir|foobar)
|
|
Packit Service |
a8c26c |
FPATH=$tmp
|
|
Packit Service |
a8c26c |
PATH=$FPATH:$PATH
|
|
Packit Service |
a8c26c |
foobar
|
|
Packit Service |
a8c26c |
++++
|
|
Packit Service |
a8c26c |
) == foo ]] > /dev/null || err_exit 'functions compiled with shcomp not working'
|
|
Packit Service |
a8c26c |
# tests for compiled . scripts
|
|
Packit Service |
a8c26c |
print $'print hello\nprint world' > $tmp/foo
|
|
Packit Service |
a8c26c |
${SHCOMP:-${SHELL%/*}/shcomp} $tmp/foo > $tmp/foo.sh
|
|
Packit Service |
a8c26c |
val=$(. $tmp/foo.sh)
|
|
Packit Service |
a8c26c |
[[ $val == $'hello\nworld' ]] || err_exit "processing compiled dot files not working correctly val=$val"
|
|
Packit Service |
a8c26c |
# test for functions in shell having side effects.
|
|
Packit Service |
a8c26c |
unset -f foo foobar bar
|
|
Packit Service |
a8c26c |
cd "$tmp"
|
|
Packit Service |
a8c26c |
FPATH=$PWD
|
|
Packit Service |
a8c26c |
PATH=$FPATH:$PATH
|
|
Packit Service |
a8c26c |
cat > foo <<- \EOF
|
|
Packit Service |
a8c26c |
function bar
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print foobar
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
bar
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
EOF
|
|
Packit Service |
a8c26c |
chmod +x foo
|
|
Packit Service |
a8c26c |
: $(foo)
|
|
Packit Service |
a8c26c |
[[ $(typeset +f) == *foo* ]] && err_exit 'function in subshell leaving side effect of function foo'
|
|
Packit Service |
a8c26c |
unset -f foo bar
|
|
Packit Service |
a8c26c |
: $(foo)
|
|
Packit Service |
a8c26c |
[[ $(typeset +f) == *foo* ]] && err_exit 'function in subshell leaving side effects of function foo after reload'
|
|
Packit Service |
a8c26c |
[[ $(typeset +f) == *bar* ]] && err_exit 'function in subshell leaving side effects of function bar after reload'
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
unset -f foo
|
|
Packit Service |
a8c26c |
typeset -A bar
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset -i bar[$1].x
|
|
Packit Service |
a8c26c |
bar[$1].x=5
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
foo sub
|
|
Packit Service |
a8c26c |
[[ ${!bar[@]} == sub ]] || err_exit 'scoping problem with compound array variables'
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
function A
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
trap "> /dev/null;print TRAP A" EXIT
|
|
Packit Service |
a8c26c |
# (( stderr )) && print >&2
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
function B
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
trap "> /dev/null;print TRAP B" EXIT
|
|
Packit Service |
a8c26c |
A
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
x=$(B)
|
|
Packit Service |
a8c26c |
[[ $x == $'TRAP A\nTRAP B' ]] || err_exit "trap from functions in subshells fails got" $x
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset bar=abc
|
|
Packit Service |
a8c26c |
unset bar
|
|
Packit Service |
a8c26c |
# [[ $bar == bam ]] || err_exit 'unsetting local variable does not expose global variable'
|
|
Packit Service |
a8c26c |
[[ $bar ]] && err_exit 'unsetting local variable exposes global variable'
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
bar=bam
|
|
Packit Service |
a8c26c |
foo
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
sleep=$(whence -p sleep)
|
|
Packit Service |
a8c26c |
function gosleep
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
$sleep 4
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
x=$(
|
|
Packit Service |
a8c26c |
(sleep 2; pid=; ps | grep sleep | read pid extra; [[ $pid ]] && kill -- $pid) &
|
|
Packit Service |
a8c26c |
gosleep 2> /dev/null
|
|
Packit Service |
a8c26c |
print ok
|
|
Packit Service |
a8c26c |
)
|
|
Packit Service |
a8c26c |
[[ $x == ok ]] || err_exit 'TERM signal sent to last process of function kills the script'
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
# verify that $0 does not change with functions defined as fun()
|
|
Packit Service |
a8c26c |
func1()
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
[[ $0 == "$dol0" ]] || err_exit "\$0 changed in func1() to $0"
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
function func2
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
[[ $0 == func2 ]] || err_exit "\$0 changed in func2() to $0"
|
|
Packit Service |
a8c26c |
dol0=func2
|
|
Packit Service |
a8c26c |
func1
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
func2
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
{ $SHELL <<- \EOF
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset rc=0
|
|
Packit Service |
a8c26c |
unset -f foo
|
|
Packit Service |
a8c26c |
return $rc;
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
foo
|
|
Packit Service |
a8c26c |
EOF
|
|
Packit Service |
a8c26c |
} 2> /dev/null || err_exit 'problem with unset -f foo within function foo'
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
val=$($SHELL 2> /dev/null <<- \EOF
|
|
Packit Service |
a8c26c |
.sh.fun.set() { set -x; }
|
|
Packit Service |
a8c26c |
function f1 { print -n ${.sh.fun}; set -o | grep xtrace;}
|
|
Packit Service |
a8c26c |
function f2 { print -n ${.sh.fun}; set -o | grep xtrace;}
|
|
Packit Service |
a8c26c |
f1
|
|
Packit Service |
a8c26c |
set -o | grep xtrace
|
|
Packit Service |
a8c26c |
f2
|
|
Packit Service |
a8c26c |
EOF)
|
|
Packit Service |
a8c26c |
[[ $val == f1xtrace*on*off*f2xtrace*on* ]] || err_exit "'.sh.fun.set() { set -x; }' not tracing all functions"
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset opt OPTIND=1 OPTARG hflag=
|
|
Packit Service |
a8c26c |
while getopts hi: opt
|
|
Packit Service |
a8c26c |
do case $opt in
|
|
Packit Service |
a8c26c |
h) hflag=1;;
|
|
Packit Service |
a8c26c |
i) [[ $OPTARG == foobar ]] || err_exit 'OPTARG should be set to foobar in function foo';;
|
|
Packit Service |
a8c26c |
esac
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
shift $((OPTIND - 1))
|
|
Packit Service |
a8c26c |
(( OPTIND == 4 )) || err_exit "OPTIND is $OPTIND at end of function foo; it should be 4"
|
|
Packit Service |
a8c26c |
[[ $1 == foo2 ]] || err_exit "\$1 is $1, not foo after getopts in function"
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
OPTIND=6 OPTARG=xxx
|
|
Packit Service |
a8c26c |
foo -h -i foobar foo2
|
|
Packit Service |
a8c26c |
[[ $OPTARG == xxx ]] || err_exit 'getopts in function changes global OPTARG'
|
|
Packit Service |
a8c26c |
(( OPTIND == 6 )) || err_exit 'getopts in function changes global OPTIND'
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
if [[ ! $compiled ]]
|
|
Packit Service |
a8c26c |
then function foo { getopts --man; }
|
|
Packit Service |
a8c26c |
[[ $(typeset -f foo) == 'function foo { getopts --man; }' ]] || err_exit 'typeset -f not work for function with getopts'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
let 1
|
|
Packit Service |
a8c26c |
return $1
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
invals=(135 255 256 267 -1)
|
|
Packit Service |
a8c26c |
outvals=(135 255 0 267 255)
|
|
Packit Service |
a8c26c |
for ((i=0; i < ${#invals[@]}; i++))
|
|
Packit Service |
a8c26c |
do foo ${invals[i]}
|
|
Packit Service |
a8c26c |
[[ $? == "${outvals[i]}" ]] || err_exit "function exit ${invals[i]} should set \$? to ${outvals[i]}"
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
function foo
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
typeset pid
|
|
Packit Service |
a8c26c |
sleep 2 & pid=$!
|
|
Packit Service |
a8c26c |
sleep 1
|
|
Packit Service |
a8c26c |
kill -TERM $pid
|
|
Packit Service |
a8c26c |
wait $pid
|
|
Packit Service |
a8c26c |
rc=$?
|
|
Packit Service |
a8c26c |
return $rc
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
foo 2> /dev/null
|
|
Packit Service |
a8c26c |
rc=$?
|
|
Packit Service |
a8c26c |
exp=$((256+$(kill -l TERM) ))
|
|
Packit Service |
a8c26c |
[[ $rc == "$exp" ]] || err_exit "expected exitval $exp got $rc"
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
exit $((Errors<125?Errors:125))
|