【问题标题】:POSIX Shell sh get currently executed line numberPOSIX Shell sh 获取当前执行的行号
【发布时间】:2021-04-21 13:34:42
【问题描述】:

如何在 POSIX shell 脚本中获取当前执行的行号? 例如我有一个脚本:

#!/bin/sh

set -eu

echo "A"
echo "B"

echo "Script '$0' error at line no: <line-no>"
exit 1

echo "C"

我想代替 &lt;line-no&gt; 脚本的当前行,所以输出例如:

第 8 行的脚本“script.sh”错误:8

【问题讨论】:

    标签: shell sh posix


    【解决方案1】:

    你可以使用$LINENO:

    LINENO

    在执行每个命令之前,由 shell 设置为一个十进制数,表示脚本或函数中的当前连续行号(从 1 开始编号)。如果用户取消设置或重置 LINENO,则该变量可能会在 shell 的整个生命周期中失去其特殊意义。如果 shell 当前未执行脚本或函数,则未指定 LINENO 的值。本卷 POSIX.1-2017 仅指定变量对支持 User Portability Utilities 选项的系统的影响。

    【讨论】:

    • 我将&lt;line-no&gt; 替换为$LINENO 但出现错误:./script.sh: 8: ./script.sh: LINENO: parameter not set
    • Debian 的破折号与 POSIX 不兼容,因为他们 disable LINENO 可以解决损坏的软件包构建问题。在 POSIX shell 中再试一次。
    猜你喜欢
    • 2013-02-06
    • 2018-09-20
    • 2012-09-06
    • 2011-01-13
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多