我们在执行脚本的时候,如果向记录脚本的执行时间,类似于日志一样,可以使用如下方式
#!/bin/bash
# 打印上次执行的命令
command_time() {
echo `date +"%Y-%m-%d %H:%M:%S.%3N"` $BASH_COMMAND
}
# 设置DEBUG陷阱来捕获每个命令的执行
trap 'command_time' DEBUG
echo "h1"
sleep 1
echo "h2"
sleep 1
echo "h3"
执行这个脚本
2024-04-07 23:47:21.948 echo "h1"
h1
2024-04-07 23:47:21.950 sleep 1
2024-04-07 23:47:22.952 echo "h2"
h2
2024-04-07 23:47:22.954 sleep 1
2024-04-07 23:47:23.956 echo "h3"
h3
这里面用到了两个内置函数:trap 和 $BASH_COMMAND
trap
trap: 用于捕获和处理信号。在Shell脚本中,trap
可以用来捕获和处理各种事件,比如脚本退出、接收到中断信号(Ctrl+C)等。trap
命令的基本语法如下:
trap command signal
这里,command
是当指定的 signal
被触发时要执行的命令或函数,而 signal
是要捕获的信号或事件。
trap
可以用于多种不同的信号,例如:
EXIT
:当脚本或任何函数退出时触发。ERR
:当任何命令返回非零状态时触发。INT
:当脚本接收到中断信号(通常是按下 Ctrl+C)时触发。TERM
:当脚本接收到终止信号(通常是kill
命令)时触发。trap DEBUG
是一种强大的技术,它允许你在脚本执行的每个命令之前和之后插入调试信息。当你在脚本中设置trap DEBUG
,Shell会在执行每个命令之前和之后运行你指定的函数或命令。
$BASH_COMMAND
shell 的内置命令,获取上次执行的命令行