首页 > 解决方案 > 在一行中执行多个操作时如何在shell脚本中计算时间

问题描述

我想运行一个 bash 文件(script.sh 文件),它将打印一些日志,并且我正在将日志重定向到一些文本文件中。

我想知道运行 script.sh 文件需要多少时间?我正在重定向这样的日志:

./script.sh >> logs.txt

我正在计算这样的时间:

time ./scripts.sh

我可以同时执行这两种操作吗(将 script.sh 日志重定向到文本文件并在同一命令或一行中计算脚本执行的时间)?

标签: bashshell

解决方案


如果您的脚本也可能将有关错误的相关消息发送到日志中,但您不希望日志中也包含时间数据,那么您将需要分别控制每个 I/O。

假设一个文件是这样的:

#!/bin/bash
echo channel 1     # stdout
echo channel 2 >&2 # stderr

要将时间信息获取到控制台但将错误记录到您的文件中,请将 I/O 控件包装在大括号或子外壳中。

使用大括号,您需要一个分号或将右大括号放在下一行

$: time { ./tst >x 2>&1; }

使用子外壳的括号,您可以包含或不包含它。

$: time ( ./tst >x 2>&1 )

要么将时间信息显示到控制台:

real    0m0.154s
user    0m0.062s
sys     0m0.062s

日志仍然会有两者。

$: cat x
channel 1
channel 2

推荐阅读