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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |