![在运行命令之前打印其输出的时间](https://linux22.com/image/158258/%E5%9C%A8%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4%E4%B9%8B%E5%89%8D%E6%89%93%E5%8D%B0%E5%85%B6%E8%BE%93%E5%87%BA%E7%9A%84%E6%97%B6%E9%97%B4.png)
我有一个 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/'