如何在Bash中友好地格式化打印命令执行耗时?
如何在Bash中友好地格式化打印命令执行耗时?
嘿,太懂你这种不想写一堆复杂bc表达式的心情了!Linux默认确实没有叫tdiff的原生命令,但有几个现成的工具能完美满足你的需求,不用自己写脚本:
1. 用dateutils包的datediff命令(推荐)
这是最贴合你想要的tdiff功能的工具,它能自动根据时长选择合适的单位来输出,还支持自定义格式。
首先得安装它:
- Debian/Ubuntu系:
sudo apt install dateutils - RHEL/CentOS系:
sudo yum install dateutils
用法超级简单,完全符合你期待的写法:
#!/bin/bash start=$(date +%s) ./my-long-command.sh ./another-longcommand.sh echo "Completed, in $(datediff $(date +%s) $start -f '%a')"
这里的%a参数会让它自动输出友好的格式化结果——比如耗时450秒就显示7m30s,耗时1小时20分就显示1h20m,小于60秒就直接显示XXs,完全不用你操心单位转换!
如果你想要更定制化的格式,比如强制显示时分秒,可以用%Hh %Mm %Ss,比如datediff ... -f '%Hh %Mm %Ss',会输出0h7m30s这种格式。
2. 用GNU Date自带的时间差计算
如果不想装额外的包,Linux默认的GNU date命令也能搞定,虽然需要一点点简单的计算,但比bc清爽多了:
#!/bin/bash start=$(date +%s) ./my-long-command.sh ./another-longcommand.sh end=$(date +%s) duration=$((end - start)) echo "Completed, in $(date -u -d @"$duration" +'%H:%M:%S')"
这个会输出类似00:07:30的时分秒格式,如果你想让它更智能地显示单位(比如只显示秒或分钟),可以加几行简单的判断,但如果你追求完全不用自己写逻辑,还是datediff更省心。
备注:内容来源于stack exchange,提问作者yegor256
相关产品推荐
相关产品推荐

