外观
Debug
shell 提供了用于 debug 脚本的工具。
如果想采用 debug 模式运行某脚本,可以在其 shebang 中使用一个特殊的选项:
#!/bin/bash optionsoptions 是一些可以改变 shell 行为的选项。下表是一些可能对你有用的选项:
| Short | Name | Description |
|---|---|---|
-f | noglob | 禁止文件名展开(globbing) |
-i | interactive | 让脚本以 交互 模式运行 |
-n | noexec | 读取命令,但不执行(语法检查) |
-t | — | 执行完第一条命令后退出 |
-v | verbose | 在执行每条命令前,向stderr输出该命令 |
-x | xtrace | 在执行每条命令前,向stderr输出该命令以及该命令的扩展参数 |
举个例子,如果我们在脚本中指定了-x例如:
#!/bin/bash -x
for (( i = 0; i < 3; i++ )); do
echo $i
done这会向stdout打印出变量的值和一些其它有用的信息:
$ ./my_script
+ (( i = 0 ))
+ (( i < 3 ))
+ echo 0
0
+ (( i++ ))
+ (( i < 3 ))
+ echo 1
1
+ (( i++ ))
+ (( i < 3 ))
+ echo 2
2
+ (( i++ ))
+ (( i < 3 ))有时我们值需要 debug 脚本的一部分。这种情况下,使用set命令会很方便。这个命令可以启用或禁用选项。使用-启用选项,+禁用选项:
⌨️ 『示例源码』
# 开启 debug
set -x
for (( i = 0; i < 3; i++ )); do
printf ${i}
done
# 关闭 debug
set +x
# Output:
# + (( i = 0 ))
# + (( i < 3 ))
# + printf 0
# 0+ (( i++ ))
# + (( i < 3 ))
# + printf 1
# 1+ (( i++ ))
# + (( i < 3 ))
# + printf 2
# 2+ (( i++ ))
# + (( i < 3 ))
# + set +x
for i in {1..5}; do printf ${i}; done
printf "\n"
# Output: 12345