42

を使用するtime lsと、次の出力が得られます。

$ time ls -l 
total 2
-rwx------+ 1 FRIENDS None 97 Jun 23 08:59 location.txt
-rw-r--r--+ 1 FRIENDS None 10 Jun 23 09:06 welcome
real    0m0.040s
user    0m0.000s    
sys     0m0.031s

ここで、実際の値の行のみを試してみるとgrep実際の結果は次のようになります。

$ time ls -l | grep real
real    0m0.040s
user    0m0.000s
sys     0m0.031s

私の質問は、出力として実際の値のみを取得する方法は? この場合、0m0.040s.

4

5 に答える 5

64

time出力を stderr に書き込むため、stdout の代わりに stderr をパイプする必要があります。ただし、これtimeは bash の構文の一部であり、パイプライン全体の時間を計測することも重要です。したがって、パイプラインを中かっこで囲むか、サブシェルで実行する必要があります。

 $ { time ls -l >/dev/null; } 2>&1 | grep real
 real   0m0.005s

Bash v4.0 (おそらく Linux ディストリビューションではユニバーサルですが、Mac OS X ではまだ標準ではありません) では、 と の両方をパイプするために使用でき|&ます。stdoutstderr

{ time ls -l >/dev/null; } |& grep real

または、time出力形式を制御できるユーティリティを使用することもできます。私のシステムでは、そのユーティリティは次の場所にあり/usr/bin/timeます。

/usr/bin/time -f%e ls -l >/dev/null 

man timetimeユーティリティの詳細については。

于 2013-06-23T04:41:54.310 に答える
17
(time ls -l)  2>&1 > /dev/null |grep real

これにより、stderr (time がその出力を送信する場所) が stdout と同じストリームにリダイレクトされ、stdout が dev/null にリダイレクトされるため、ls の出力はキャプチャされず、現在の time の出力が grep の stdin にパイプされます。

于 2013-06-23T04:34:35.743 に答える
13

time builtinの出力形式を指定するだけの場合はTIMEFORMAT、 でフィルタリングする代わりに、環境変数の値を変更できますgrep

あなたの場合、

TIMEFORMAT=%R
time ls -l

「リアルタイム」時間のみを提供します。

Bashマニュアルの関連情報へのリンクは次のとおりです(「TIMEFORMAT」の下)。

これは、SO の出力の解析に関する同様の質問ですtime

于 2013-06-23T04:46:04.997 に答える
3

注意してください.. bashには組み込みの「time」コマンドがあります。ここにいくつかの違いがあります..

# GNU time command (can also use $TIMEFORMAT variable instead of -f)
bash> /usr/bin/time -f%e ls >/dev/null
0.00


# BASH built-in time command (can also use $TIME variable instead of -f)
bash> time -f%e ls >/dev/null
-f%e: command not found

real    0m0.005s
user    0m0.004s
sys     0m0.000s
于 2016-06-23T18:26:13.180 に答える
-1

少し簡単にできると思います:

time ls &> /dev/null | grep real
于 2015-04-19T22:25:08.270 に答える