加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – Shell脚本在出错时打印行号

发布时间:2020-12-15 22:03:11 所属栏目:安全 来源:网络整理
导读:我一直在寻找一种在 shell脚本出错时打印行号的方法. 我遇到了’-x’选项,它在运行shell脚本时打印该行,但这不是我想要的.也许我可以在每个退出代码之前做$LINENO?有更清洁的方法吗? 我只想要行号,这样我就可以打开shell脚本并直接转到解释器实现错误的地
我一直在寻找一种在 shell脚本出错时打印行号的方法.

我遇到了’-x’选项,它在运行shell脚本时打印该行,但这不是我想要的.也许我可以在每个退出代码之前做$LINENO?有更清洁的方法吗?

我只想要行号,这样我就可以打开shell脚本并直接转到解释器实现错误的地方.

解决方法

运用

PS4=':$LINENO+'

将行号添加到set -x的输出.

如果您只想在错误上打印它,那么在最近的解释器中存在一些遇到错误的风险.但是,您可以尝试以下操作(首先在this previous answer中给出):

error() {
  local parent_lineno="$1"
  local message="$2"
  local code="${3:-1}"
  if [[ -n "$message" ]] ; then
    echo "Error on or near line ${parent_lineno}: ${message}; exiting with status ${code}"
  else
    echo "Error on or near line ${parent_lineno}; exiting with status ${code}"
  fi
  exit "${code}"
}
trap 'error ${LINENO}' ERR

同样,这不适用于最近的一些bash版本,它们并不总是在陷阱中正确设置LINENO.

另一种方法(仅适用于最近的shell;下面使用一些bash 4.0和4.1功能)是使用PS4将每个命令的退出状态和行号发送到专用文件描述符,并使用tail仅打印最后一个在shell退出之前给予该FD的行:

exec {BASH_XTRACEFD}> >(tail -n 1) # send set -x output to tail -n 1
PS4=':At line $LINENO; prior command exit status $?+'
set -x

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读