微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

shell脚本的性能分析工具

我试图加快一些脚本的调用子shell并做各种各样的事情。我想知道是否有任何可用的工具来执行shell脚本及其嵌套的shell,并报告脚本的哪些部分是最昂贵的。

例如,如果我有一个如下所示的脚本。

#!/bin/bash

echo "hello"
echo $(date)
echo "goodbye"

我想知道三条线的长短。时间只会给我全部时间的脚本。 bash -x是有趣的,但不包括时间戳或其他时间信息。

您可以设置PS4显示时间和行号。这样做不需要安装任何实用程序和工作,而不将stderr重定向到stdout。

对于这个脚本:

#!/bin/bash -x
# Note the -x flag above,it is required for this to work
PS4='$(date "+%s.%N ($LINENO) + ")'
for i in {0..2}
do
    echo $i
done
sleep 1
echo done

输出如下:

+ PS4='$(date "+%s.%N ($LINENO) + ")'
1291311776.108610290 (3) + for i in '{0..2}'
1291311776.120680354 (5) + echo 0
0
1291311776.133917546 (3) + for i in '{0..2}'
1291311776.146386339 (5) + echo 1
1
1291311776.158646585 (3) + for i in '{0..2}'
1291311776.171003138 (5) + echo 2
2
1291311776.183450114 (7) + sleep 1
1291311777.203053652 (8) + echo done
done

这假设是GNU date,但是您可以将输出规范更改为您喜欢的任何内容或与您使用的日期版本相匹配的任何内容

注意:如果您有一个现有的脚本,要进行此操作而不进行修改,则可以执行以下操作:

PS4='$(date "+%s.%N ($LINENO) + ")' bash -x scriptname

原文地址:https://www.jb51.cc/bash/388531.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐