Epe*_*ius 95 scripting bash debugging
例如,我有一个简单的 bash 文件
#!/bin/bash
cd ~/hello
ls
Run Code Online (Sandbox Code Playgroud)
如何让它在执行之前显示每个命令?Windows 批处理脚本中“@echo off”的效果正好相反。
小智 122
bash -x script
Run Code Online (Sandbox Code Playgroud)
或者
set -x
Run Code Online (Sandbox Code Playgroud)
在脚本中。
您可以使用 再次取消设置该选项set +x。如果您只想为一些命令执行此操作,则可以使用子shell:`(set -x; command1; command; ...;)
Den*_*son 24
这些也有效:
set -v
Run Code Online (Sandbox Code Playgroud)
或者
#!/bin/bash -v
Run Code Online (Sandbox Code Playgroud)
但是 -v 不会在每个脚本行之前打印 PS4 字符串,也不会单独跟踪“for”语句(例如)的步骤。它会回显评论,而 -x 不会。
以下是使用 -v 的输出示例:
#!/bin/bash -v
# this is a comment
for i in {1..4}
do
echo -n $i
done
1234echo
echo hello
hello
Run Code Online (Sandbox Code Playgroud)
这是带有 -x 的相同脚本的结果:
+ for i in '{1..4}'
+ echo -n 1
1+ for i in '{1..4}'
+ echo -n 2
2+ for i in '{1..4}'
+ echo -n 3
3+ for i in '{1..4}'
+ echo -n 4
4+ echo
+ echo hello
hello
Run Code Online (Sandbox Code Playgroud)
请注意,我包含了“echo -n”以强调 -v 和 -x 之间的差异。此外,-v 与“-o verbose”相同,但后者似乎不能作为shebang的一部分工作。
这应该有效:
set -o verbose #echo on
...
set +o verbose #echo off
Run Code Online (Sandbox Code Playgroud)