なぜこれがうまくいかないのですか?
$ time sleep 1 2>&1 | grep real
real 0m1.003s
user 0m0.007s
sys 0m0.001s
$ ofile=time.out
$ for x in {1..2}; do time sleep 1 ${x}> ${ofile} && test -s ${ofile} && echo '## OK' || echo '## NOK'; done
real 0m2.002s
user 0m0.002s
sys 0m0.000s
## NOK
real 0m3.002s
user 0m0.002s
sys 0m0.000s
## NOK
によるとman time
:
コマンドが完了すると、timeはこのプログラムの実行に関するタイミング統計を提供するメッセージを標準エラーに書き込みます。
私はどこで間違っていますか?各繰り返し時間が増加するにつれて、これも奇妙に見えますか?
$ command -V time
time is a shell keyword
$ echo $SHELL
/bin/bash
$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-unknown-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
編集する
コメントで提案を試しました。
$ command time sleep 1
bash: time: command not found
Debian9システムでもテストされました:
$ command -V time
time is a shell keyword
$ command time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 1844maxresident)k
0inputs+0outputs (0major+76minor)pagefaults 0swaps
$ time sleep 1 |& grep real
real 0m1.001s
user 0m0.000s
sys 0m0.000s
$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
答え1
これにより、コマンドがtime sleep 1 ${x}
効果的に実行されます。time sleep 1 1
time sleep 1 2
bash
組み込みコマンドはtime
これら2つの値を取り、スリープ状態を維持します。
だからとsleep 1 1
同じようsleep 2
に。sleep 1 2
sleep 3
組み込みtime
コマンドを使用すると、通常とは少し異なる動作をするため、time sleep 2>...
説明が近いですtime ( sleep 2>...)
。
だから代わりに
( time sleep 1 ) 2>&1 | grep real