这是尽可能接近内置bash调试工具的答案,因为它从脚本执行开始时间提供了整体时序信息.

在脚本的顶部添加此项以进行第二次计数:

export PS4='+[${SECONDS}s][${BASH_SOURCE}:${LINENO}]: ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'; set -x;

相同,但用毫秒代替:

N=`date +%s%N`; export PS4='+[$(((`date +%s%N`-$N)/1000000))ms][${BASH_SOURCE}:${LINENO}]: ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'; set -x;

最后一个例子可以达到微秒精度,请记住你正在使用bash :).

示例脚本:

#!/bin/bash

N=`date +%s%N`

export PS4='+[$(((`date +%s%N`-$N)/1000000))ms][${BASH_SOURCE}:${LINENO}]: ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'; set -x;

sleep 1

exit

调试输出示例:

+[3ms][/root/db_test.sh:5]: sleep 1

+[1012ms][/usr/local/bin/graphite_as_rand_stat.sh:6]: exit

请记住,您可以选择性地调试脚本的特定部分,方法是将其封装在调试启动时的“set -x”和调试端的“debug x”中.从执行开始,定时数据仍将正确显示.

附录

为了完整起见,如果您确实需要差分计时数据,您可以将调试信息重定向到文件并在之后处理它.

鉴于此示例脚本:

#!/bin/bash

N=`date +%s%N`

export PS4='+[$(((`date +%s%N`-$N)/1000000))ms][${BASH_SOURCE}:${LINENO}]: ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'; set -x;

sleep 1

for ((i=0;i<2;i++)); do

o=$(($RANDOM*$RANDOM/$RANDOM))

echo $o

sleep 0.$o

done

exit

在将调试重定向到文件时运行它:

./example.sh 2>example.dbg

并输出差分调试时序(涵盖多线):

p=0; cat example.dbg | while read l; do [[ ! ${l%%[*} =~ ^\+ ]] && echo $l && continue; i=`echo $l | sed 's#[^0-9]*\([0-9]\+\).*#\1#'`; echo $l | sed "s#${i}ms#${i}ms+$(($i-$p))ms#"; p=$i; done

输出:

+[2ms+2ms][./example.sh:5]: sleep 1

+[1006ms+1004ms][./example.sh:6]: (( i=0 ))

+[1009ms+3ms][./example.sh:6]: (( i<2 ))

+[1011ms+2ms][./example.sh:7]: o=19258

+[1014ms+3ms][./example.sh:8]: echo 19258

+[1016ms+2ms][./example.sh:9]: sleep 0.19258

+[1213ms+197ms][./example.sh:6]: (( i++ ))

+[1217ms+4ms][./example.sh:6]: (( i<2 ))

+[1220ms+3ms][./example.sh:7]: o=176

+[1226ms+6ms][./example.sh:8]: echo 176

+[1229ms+3ms][./example.sh:9]: sleep 0.176

+[1442ms+213ms][./example.sh:6]: (( i++ ))

+[1460ms+18ms][./example.sh:6]: (( i<2 ))

+[1502ms+42ms][./example.sh:11]: exit

linux刷命令脚本,linux – 如何调试bash脚本并获得每个命令的执行时间相关推荐

  1. 如何调试bash脚本

    http://coolshell.cn/articles/1379.html Bash 是Linux操作系统的默认Shell脚本.Shell是用来处理操作系统和用户交互的一个程序.Shell的脚本可以 ...

  2. linux shell 语句出错自动退出 调试 检查 脚本

    许多人用shell脚本完成一些简单任务,而且变成了他们生命的一部分.不幸的是,shell脚本在运行异常时会受到非常大的影响.在写脚本时将这类问题最小化是十分必要的.本文中我将介绍一些让bash脚本变得 ...

  3. Shell脚本学习-阶段十-Bash脚本实现每次登录Shell时可以查看Linux系统信息

    文章目录-Shell-阶段十-Bash脚本实现每次登录Shell时可以查看Linux系统信息 前言 总结 前言 # Bash脚本实现每次登录Shell时可以查看Linux系统信息 vi /opt/sc ...

  4. aws linux 安装图形,linux – 用于安装AWS CLI工具的Bash脚本

    我正在编写一个自动安装和配置AWS CLI工具的bash脚本.我可以安装AWS CLI工具,但无法配置它. 我的脚本是这样的: #!/bin/bash wget https://s3.amazonaw ...

  5. 简单调试 Bash 脚本

    用 Bash 写的脚本也可以进行调试,和 Python,Perl 等解释型语言一样.新建一个名为 servinfo 的脚本并增加可执行权限: $ vi servinfo#!/bin/bashecho ...

  6. Linux初级运维(七)——bash脚本编程(常见测试)

    一.bash中常用的条件测试 测试方法: [ expression ] [[expression]] test expression 1.整数测试 -gt:大于 -le:小于等于 -ne:不等于 -e ...

  7. Linux自定义动态壁纸,一个简单的bash脚本可根据特定条件设置动态壁纸

    dynamic-wallpaper

  8. linux脚本编程if[-z],Linux基础之bash脚本编程进阶篇-选择执行语句(if,case)

    bash脚本的书写规范简介 看本文需要了解的脚本撰写习惯:bash 开头顶格写#!紧接着写解释器路径/bin/bash 由于bash属于脚本语言,脚本语言的运行方式 解释运行:源代码 --> 运 ...

  9. linux脚本里用expect,如何在bash脚本中使用expect

    这是我在 following bash脚本中使用的代码片段: for user_input in `awk '{print}' testfile_$$.txt` do ipaddress=`echo ...

最新文章

  1. Activity LaunchMode验证
  2. 2.0版本的日历控件在ie8显示不全的解决办法
  3. iOS App 上架(Analysis 工具使用)
  4. python:使用PyInstaller打包成exe文件,以及TypeError: an integer is required (got type bytes)异常解决
  5. [CTS2019]氪金手游
  6. 获取object的值
  7. session和cookie的区别和联系,session的生命周期,多个服务部署时session管理
  8. Spring beans配置方案(一) 学习笔记
  9. 数据分析工具R和RStudio入门介绍
  10. 剑指offer面试题58 - I. 翻转单词顺序(双指针)
  11. HBuilder Android APP打包发布
  12. 设计模式-第三篇之工厂方法和抽象工厂
  13. 统计学习——联合概率分布
  14. springboot jpa 实体类继承
  15. 取消百度SiteApp转码
  16. 10000+TB 阿里网盘资源!够过年了吧?
  17. 2.6.机载测深激光扫描系统—(Topographic Laser Ranging and Scanning-Principle 读书笔记)
  18. ROS话题通信c++和python实现
  19. ios: Undefined symbols
  20. edu邮箱怎么申请一个1T的onedrive

热门文章

  1. Centos7.5 Ambari2.7.4部署
  2. Spring的@Transactional注解踩坑
  3. Java核心技术36讲
  4. 结构体的赋值和初始化与取出结构体变量中的成员
  5. 13 python初学(函数)
  6. Matlab从入门到精通 Chapter5 数据可视化
  7. Java IO学习--(五)字节和字符数组
  8. DevExpress.Utils.ToolTipLocation
  9. orcale 基本查询(1)
  10. [剑指offer]面试题第[1]题[JAVA][二维数组中的查找][数组][二分]