脚本a.sh的内容为:
set -x
echo "$PWD"
执行脚本结果:
++ echo /home/yanwenjie/bashtest
/home/yanwenjie/bashtest
-x选项将回送经过参数替换、命令替换和其他命令行处理步骤后得到的命令行结果。
x选项在每一行开始都打印+,(但是不知道为什么我这边打印了2个),这实际上可以定制的,它是内置变量shell变量PS4的值。可以
通过修改PS4的值来修改这个符号。
例如脚本a.sh的内容如下:
PS4="debug->"
set -x
echo "$PWD"
执行结果:
$ ./a.sh
ddebug->echo /home/yanwenjie/bashtest
/home/yanwenjie/bashtest
(不知道为什么这边出现了2个d。。谁能回答一下)
让我们简单回顾一下PS1,PS2,PS3的作用:
PS1是用来控制shell提示符的样式。例如我登陆shell的式样是:root@ywjPC:~#
PS2是当我们输入"\"时,多行提示符的样式,默认是">".
PS3是Shell脚本中使用select时的提示符。
2.伪信号
伪信号和工作方式和trap一样,但它们时由shell本身产生,可以像对待shell脚本里的实际信号一样对待它。
伪信号 发送时间
EXIT shell从脚本中退出后
DEBUG shell已经执行了一个语句
2.1.EXIT
例如下面的脚本a.sh:
trap "echo ‘exit from shell‘" EXIT
echo "hello"
执行结果:
# ./a.sh
hello
exit from shell
2.2.DEBUG
DEBUG用来在一个函数或脚本内所有语句后执行陷阱代码。它的主要用途是用来作为一种跟踪错误的程序状态元素的强制性
方法。
例如下面的脚本a.sh:
function dbgtrap
{
echo "i=$i"
}
i=1
trap dbgtrap DEBUG
i=$((i+1))
i=$((i+1))
i=$((i+1))
trap - DEBUG
脚本中两个trap之间的每条语句执行后都会执行dbgtrap函数,包含第一个trap语句。
执行结果:
# ./a.sh
i=1
i=2
i=3
i=4
其中i=1是trap dbgtrap DEBUG语句执行后输出的。