gpt4 book ai didi

bash - Shell脚本出错时打印行号

转载 作者:行者123 更新时间:2023-11-29 09:03:10 25 4
gpt4 key购买 nike

我一直在寻找一种在 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

关于bash - Shell脚本出错时打印行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29081531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com