在运行之前回显脚本行

Que*_*ark 4 bash debugging shell-script

有没有办法运行脚本bash,使它在执行之前打印脚本的每一行?这对我的调试非常有用......

$./myscript.sh
echo "Hello"
Hello
Run Code Online (Sandbox Code Playgroud)

我将能够准确地看到我的脚本已经走了多远,以及它在做什么。

slm*_*slm 8

您可以通过使用set命令和选项来启用/禁用此功能-x/+x

-x - 展开每个简单命令后,for command、case command、select command 或算术for command,显示PS4 的展开值,后跟命令及其展开的参数或关联单词列表。

-x启用它,+x禁用它。

例子

示例脚本
$ cat ~/myscript.sh 
#!/bin/bash

set -x
echo "Hello"
Run Code Online (Sandbox Code Playgroud) 样本输出
$ ~/myscript.sh 
+ echo Hello
Hello
Run Code Online (Sandbox Code Playgroud)

  • 为了扩展这一点,您可以发挥创意并设置`PS4='${LINENO}+`,它还会告诉您脚本的哪一行扩展到正在运行的内容。对于上面的示例,输出将是 `4+ echo Hello` 后跟 `Hello`。 (2认同)