从函数回显$LINENO时,回显函数正在运行的行,而不是实际的行

  • 本文关键字:函数 LINENO 运行 bash shell
  • 更新时间 :
  • 英文 :


这是这篇文章的后续。 有人告诉我如何使用 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

相关内容

  • 没有找到相关文章

最新更新