这是this post.的后续有人告诉我如何使用DEBUG陷阱在每一行之前运行一个命令,我制作了在陷阱中执行的函数。但是,当从函数回显$LINENO时,它回显的是文本行号。我需要函数正在运行的行号。我该如何做?
更详细的解释是,假设函数foo
在第25行定义,并在第100行运行。foo
在第26行有命令echo "$LINENO"
。我希望它回显100(运行函数foo
的位置),而不是回显26(定义foo和回显命令的位置)。
我很肯定您不需要我的代码,因为我只需要帮助您获取执行函数的行号。但是,对于出于某种原因而绝对需要查看我的代码的人:您可能在我的代码中找不到任何有用的东西。
getnextp() {
i=0
small=$1
execute=
while :; do
((i++))
if [ "$i" -gt "$(sed -n '$=' plist)"]; then
break
fi
line=$(sed $i'!d' plist)
if [ "$line" == "$0" ]; then
((i++))
((i++))
line=$(sed $i'!d' plist)
if [ "$line" -lt "$small" ]; then
small="$line"
((i--))
line=$(sed $i'!d' plist)
execute=$line
((i++))
fi
fi
done
}
npl=999999999
step() {
echo "Working."
echo $LINENO
if [ "$(cat plist)" == *"$0"* ]; then
getnextp $1
if [ "$LINENO" == "$small" ]; then
cd ../
./packages/$execute
fi
fi
}
trap "step $npl" DEBUG
1条答案
按热度按时间6vl6ewon1#
在bash中,数组变量BASH_LINENO存储跟踪。例如: