コマンドを実行する前にコマンドの出力を印刷するのにかかる時間

コマンドを実行する前にコマンドの出力を印刷するのにかかる時間

次の行を含む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に関連していますか?

また、これが起こらないようにするにはどうすればよいですか?

ベストアンサー1

この試み:

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

おすすめ記事