と、コマンド(組み込みまたはしない)、それはのような言語の予約語だではありませんか。kshbashzshtimeforwhile
パイプラインのタイミングを計るのに使用されます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-outputtimeコンストラクト(再び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)