sh -n script.sh 检查语法错误,不实际执行。
sh -c "string" 执行string中的命令。
sh -x script.sh 显示所执行的每一条命令。
也可以对script中特定区域的块执行set -x开启跟踪模式,set +x关闭跟踪模式。
输出的信息仅限于进行变量替换之后的每一条实际执行的命令以及行首的一个"+"号提示符,这个+就是第四级提示符变量$PS4。
cat script.sh
-
#!/bin/bash
-
-
echo $PS4
-
PS4='+{$LINENO:${FUNCNAME[0]}}'
-
-
trap 'function_trap' ERR
-
-
function_trap()
-
{
-
echo "Error status $?"
-
}
-
-
function_fail()
-
{
-
return 1
-
}
-
-
function_pass()
-
{
-
return 0
-
}
-
-
function_fail
-
function_pass
#sh -x script.sh
-
+ echo +
-
+
-
+ PS4='+{$LINENO:${FUNCNAME[0]}}'
-
+{6:}trap function_trap ERR
-
+{23:}function_fail
-
+{15:function_fail}return 1
-
++{15:}function_trap
-
++{10:function_trap}echo 'Error status 1'
-
Error status 1
-
+{24:}function_pass
-
+{20:function_pass}return 0
$FUNCNAME是一个数组变量,包含调用链上所有的函数的名字。${FUNCNAME[0]}代表当前执行函数,1代表调用函数,以此类推。
$LINENO代表当前行号。
trap用于捕获指定的信号(可指定多个信号,用空格分隔)并执行预定义的命令。查看信号可以执行trap -l命令。
script.sh执行时,产生三个“伪信号”:
EXIT(从一个函数中退出或者整个脚本执行完毕)
ERR($?不为零)
DEBUG(每一条命令执行完毕)
另外对于管道命令可以通过tee把中间结果导出到临时文件进行分析调试。
阅读(1785) | 评论(0) | 转发(0) |