当前位置: 首页 > 面试题库 >

执行bash脚本时如何显示行号

拓拔嘉颖
2023-03-14
问题内容

我使用的测试脚本包含很多命令,并且会生成大量输出,我使用set -xset -vset -e,所以脚本会在发生错误时停止。但是,我仍然很难定位执行停止在哪一行以定位问题。有没有一种方法可以在执行每行之前输出脚本的行号?还是输出命令产生之前的行号set -x?否则任何可以解决我的脚本行位置问题的方法都将提供很大的帮助。谢谢。


问题答案:

您提到您已经在使用-x。该变量PS4表示值是-x设置选项时在回显命令行之前打印的提示,默认情况下为:空格。

您可以更改PS4以发出LINENO(当前正在执行的脚本或shell函数中的行号)。

例如,如果您的脚本显示为:

$ cat script
foo=10
echo ${foo}
echo $((2 + 2))

因此执行它会打印行号:

$ PS4='Line ${LINENO}: ' bash -x script
Line 1: foo=10
Line 2: echo 10
10
Line 3: echo 4
4

http://wiki.bash-hackers.org/scripting/debuggingtips提供了最终的PS4输出,该输出将输出您可能需要进行跟踪的所有内容:

export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'


 类似资料:
  • 问题内容: 我有一些要自动执行的SQL脚本。过去,我使用过SQL * Plus,并从bash脚本中手动调用了sqlplus二进制文件。 但是,我试图找出是否有一种方法可以连接到数据库,并从bash脚本内部调用该脚本……以便我可以插入查询并使查询相对于特定天数运行过去。 问题答案: 我有点困惑。您应该能够从bash脚本中调用sqlplus。这可能就是您在第一个陈述中所做的 尝试在bash脚本中执行以

  • 我试图从一个简单的BASH脚本执行一个简单的PHP脚本。这个网站上的答案不能回答我的问题。 这是我的BASH脚本 这是我的PHP脚本 从命令行运行BASH脚本时,出现以下错误。 我试过键入/usr/bin/php-q/home/username/subfolder/durable2。这很好。它跑起来了

  • 问题内容: 假设我在网址“ http://mywebsite.com/myscript.txt”处有一个包含脚本的文件: 而且我想先运行该脚本而不先将其保存到文件中。我该怎么做呢? 现在,我已经看到了语法: 但这似乎不像我保存到文件然后执行时那样。例如,readline不起作用,而输出仅为: 同样,我尝试过: 具有相同的结果。 最初我有一个解决方案,例如: 但这似乎草率,我想要一个更优雅的解决方案

  • 问题内容: 我试图找出一种从Golang执行脚本(.sh)文件的方法。我发现了几种简单的执行命令的方法(例如os / exec),但是我要执行的是执行整个sh文件(该文件设置了变量等)。 为此,使用标准的os / exec方法似乎并不简单:尝试输入“ ./script.sh”并将脚本内容加载到字符串中都不能用作exec函数的参数。 例如,这是我要从Go执行的sh文件: 从Go程序中: 其中mong

  • 我在我的debian系统上创建了一个虚拟环境,并制作了一个脚本来激活它(应该)。 然而,当我执行脚本时,什么都没有显示,甚至没有错误,我猜测它正在不同的shell或其他东西中运行,但我不知道如何解决它。 这是脚本的代码 我已经使用chmod u x更改了权限,所以这不是问题。 当我执行脚本时,什么都没有显示。有什么想法吗???

  • 问题内容: 我正在寻找编写一个小的bash脚本,以便在启动时监视任何新创建文件的目录。如果出现新文件,我希望它的存在触发第二个脚本运行。 我看到它被用来触发压缩最近数字化的视频,并将其添加到摄取素材的日志中。 目前,我的代码如下所示: 有没有更简单/更清洁/更少内存的方式来做到这一点? 编辑 我将在每个捕获会话中更改提取目录。我已经相应地调整了代码 问题答案: Incron 怎么样?它在文件/目录