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

gkn4icbw  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(183)

这是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
6vl6ewon

6vl6ewon1#

在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

相关问题