と、コマンド(組み込みまたはしない)、それはのような言語の予約語だではありませんか。ksh
bash
zsh
time
for
while
パイプラインのタイミングを計るのに使用されます1。
に:
time for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
パイプラインを実行するようシェルに指示する特別な構文があります:
for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
そして、そのためのタイミング統計を報告します。
に:
time cmd > output 2> error
それは同じで、コマンドのタイミングを計っていますがcmd > output 2> error
、タイミング統計はシェルの標準エラーに残ります。
必要なもの:
{ time cmd > output 2> error; } 2> timing-output
または:
exec 3>&2 2> timing-output
time cmd > output 2> error 3>&-
exec 2>&3 3>&-
シェルのstderrがtiming-output
timeコンストラクト(再びcommandではなく)が使用される前にリダイレクトされます(ここではtimeになりますcmd > output 2> error 3>&-
)。
また、stderrがリダイレクトtime
されたサブシェルでその構成を実行することもできます。
(time cmd > output 2> error) 2> timing-output
ただし、このサブシェルはここでは必要ありませんtime
。コンストラクトが呼び出されたときにリダイレクトされるのはstderrだけです。
ほとんどのシステムにはtime
コマンドもあります。time
キーワードを無効にすることで、それを呼び出すことができます。キーワードはリテラルである場合にのみ認識されるため、キーワードを引用するだけです。
'time' cmd > output 2> error-and-timing-output
しかし、形式が異なると、両方のstderrのかもしれ用心time
とcmd
にマージされますerror-and-timing-output
。
また、time
コマンドは、time
コンストラクトとは対照的に、パイプライン、複合コマンド、複合関数、またはシェル組み込み関数の時間を計ることができません...
組み込みコマンドである場合、関数呼び出しまたは組み込みコマンドの時間を計ることができますが、リダイレクト、パイプライン、または複合コマンドの時間を計ることはできません。
1つの注bash
(どのように考えることができる)を有しているバグができるtime (cmd) 2> file
(ただし、time cmd | (cmd2) 2> file
例えば、)は、タイミング出力をリダイレクトfile
time
シェルキーワードであるかであるかによって結果が異なることに注意してください/usr/bin/time
。ここには、いくつかの記述子セット(シェル、およびtime
プロセスにアタッチされたもの)が含まれる場合があります。そして、()
サブシェルによって暗示されるものを忘れないでください。(bashの専門家を待っている:p)