#!/usr/bin/env sh # shell script profiler # measures elapsed execution time in milliseconds # note: adds significant overhead and pprofiler becomes $0 time_now() { date '+%s%N'; } calc_offset() { curr_time=$(time_now); off=$(echo "scale=6; ($curr_time - $prev_time) / 1000000" | bc) prev_time=$curr_time echo "+ [${off}ms] " } PS4='`calc_offset`' script="$1" && shift prev_time=$(time_now) set -x . "$script" 2>&1