如何在 bash 中漂亮地打印时间差?

如何在 bash 中漂亮地打印时间差?

在我的bash脚本中,我想打印执行一组命令所花费的时间。

我正在这样做:

#!/bin/bash
start=$(date +%s)
./my-long-command.sh
./another-longcommand.sh
echo "Completed, in $(echo "$(date +%s) - ${start}" | bc)s"

例如,它会打印:

Completed, in 450s

我希望它打印毫秒、秒、分钟或小时——具体取决于值。另外,我不想bc在每个需要打印这种时间差的脚本中都写一个复杂的表达式。您是否知道tdiffLinux 中任何命令可以实现此功能:

echo "Completed, in $(tdiff ${start})"

请不要建议我为此创建自己的脚本。

答案1

内置变量为了这:

#!/bin/bash
./my-long-command.sh
./another-longcommand.sh
echo "Completed, in ${SECONDS}s"

请不要建议我为此创建自己的脚本。

为什么不呢?其实没那么复杂:

tdiff() {
    if (($1 < 60)); then
        printf '%ds' "$1"
    elif (($1 < 60*60)); then
        printf '%dm' $(($1 / 60))
        tdiff $(($1 % 60))
    else
        printf '%dh' $(($1 / (60*60)))
        tdiff $(($1 % (60*60)))
    fi
}

相关内容