Imported from ../bash-2.0.tar.gz.
This commit is contained in:
parent
726f63884d
commit
ccc6cda312
502 changed files with 91988 additions and 69123 deletions
66
examples/scripts.v2/shprof
Normal file
66
examples/scripts.v2/shprof
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
#! /bin/bash
|
||||
#
|
||||
# shprof - a line profiler for shell scripts
|
||||
#
|
||||
# adapted from a similar program included in `The New KornShell' by
|
||||
# Bolsky and Korn and posted to usenet by bsh20858@challenger.fhda.edu
|
||||
#
|
||||
# converted to bash v2 syntax by Chet Ramey
|
||||
#
|
||||
TMPFILE=${TMP:-/tmp}/shprof$$
|
||||
|
||||
trap 'rm -f $TMPFILE' EXIT
|
||||
|
||||
errexit()
|
||||
{
|
||||
echo $0: "$@" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# create script with profiling enabled
|
||||
cat > $TMPFILE <<- \_EOF_
|
||||
declare -a _line
|
||||
_profend()
|
||||
{
|
||||
case "$1" in
|
||||
/*|./*) file="$1" ;;
|
||||
*) file=$(type -path "$1") ;;
|
||||
esac
|
||||
|
||||
echo "*** line profile for $file ***"
|
||||
i=1;
|
||||
while read -r && [ $i -le $NLINE ]; do
|
||||
count=${_line[$i]}
|
||||
if [ "$count" -gt 0 ]; then
|
||||
echo "[$count] $i: $REPLY"
|
||||
fi
|
||||
i=$((i + 1))
|
||||
done <$file
|
||||
_EOF_
|
||||
# make the profiling script remove itself after printing line stats
|
||||
echo "rm -f $TMPFILE" >> $TMPFILE
|
||||
cat >> $TMPFILE <<- \_EOF_
|
||||
}
|
||||
_command=$1
|
||||
shift
|
||||
i=1
|
||||
NLINE=$(wc -l < "$_command")
|
||||
while [ $i -le $NLINE ]; do
|
||||
_line[$i]=0
|
||||
i=$((i + 1))
|
||||
done
|
||||
unset i
|
||||
trap "_profend ${_command}" EXIT
|
||||
trap '_line[$LINENO]=$((${_line[$LINENO]} + 1))' DEBUG
|
||||
LINENO=0
|
||||
_EOF_
|
||||
|
||||
case "$1" in
|
||||
/*|./*) file=$1 ;;
|
||||
*) file=$((type -path "$1")) ;;
|
||||
esac
|
||||
|
||||
cat "${file-$1}" >> $TMPFILE || errexit "${1}: cannot open"
|
||||
chmod +x $TMPFILE
|
||||
|
||||
exec -a "$file" $TMPFILE "$@"
|
||||
Loading…
Add table
Add a link
Reference in a new issue