这是这篇文章的后续。 有人告诉我如何使用 DEBUG 陷阱在每行之前运行命令,我制作了在陷阱中执行的函数。但是,当从函数回显$LINENO时,它会回显文字行号。我需要运行函数的行号。我该怎么做?
更多解释,假设函数foo
在第 25 行定义并在第 100 行运行。foo
在第 26 行具有命令echo "$LINENO"
。我希望它回显 100(运行函数foo
的位置),而不是回显 26(定义 foo 的位置和 echo 命令所在的位置)。
而且我很确定你不需要我的代码,因为我只需要帮助获取正在执行函数的行号。 但是,对于那些出于某种原因绝对需要查看我的代码的人: 你可能不会在我的代码中找到任何有用的东西。
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
在 bash 中,数组变量BASH_LINENO存储跟踪。 例如:
#!/bin/bash
foo() {
echo at $LINENO in foo, called from ${BASH_LINENO[0]}
echo which was called from line ${BASH_LINENO[1]};
}
bar() { foo; }
bar