我试图加快一些脚本的调用子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