在运行命令之前打印其输出的时间

在运行命令之前打印其输出的时间

我有一个 bash 脚本,其中包含这样一行:

/usr/bin/time rsync -av user@host:/some/remote/path/ /some/nfs/path/

有时,输出如下所示:

0.03user 0.02system 0:00.21elapsed 26%CPU (0avgtext+0avgdata 4652maxresident)k
0inputs+152outputs (0major+2334minor)pagefaults 0swaps
receiving incremental file list
2019-07-17/
2019-08-01/
2019-08-01/12:17.csv
sent 416 bytes  received 281706 bytes  564244.00 bytes/sec
total size is 820553959  speedup is 2908.51

也就是说,随着时间的输出rsync 的输出!不用说,这使得日志的解释变得更加烦人。

我应该补充一点,该脚本将其所有输出写入日志文件;在顶部附近的某个地方,它确实:

exec >>$LOG_FILE 2>&1

因此,对于时间和 rsync,标准输出和标准错误是相同的文件描述符,即磁盘文件的句柄。

我还使用 bash 的内置脚本尝试过这个脚本time,并且我相信我已经看到了相同的行为。

这是怎么发生的?与 stderr 与 stdout 缓冲有关吗?与 rsync fork 一个比顶级进程寿命更长的子进程有关吗?

此外,我怎样才能阻止这种情况发生?

答案1

尝试这个:

/usr/bin/time sh -c 'rsync -av user@host:/some/remote/path/ /some/nfs/path/'

相关内容