視差コマンドの出力をファイルに書き込むことはできますか?
たとえば、次のように試しました。
$ time foo.sh > bar.txt
ただし、foo.shからの出力のみがbar.txtに供給されます。
ベストアンサー1
多くのシェルでは、includeとksh
はzsh
タイムパイプに使用されるキーワードですbash
。time
time foo | bar
foo
とコマンドの時間を測定しますbar
(zsh
失敗条件が表示されます)。シェルのstderrにこれを報告します。
time foo.sh > bar.txt
bar.txt
起動して実行するのにかかる時間を教えてくれますfoo.sh
。
出力をリダイレクトするには、次のようにtime
開始コンテキストからリダイレクトする必要がありますstderr
。time
{ time foo.sh; } 2> bar.txt
これ:
2> bar.txt time foo.sh
うまくいきますが、ksh93
とを使用するとbash
最初の場所ではないため、time
キーワードとして認識されません。time
注文する代わりに使用してください(他の出力形式を見つけることができ、パイプライン時間を測定しません)。
foo.sh
リダイレクト時間の出力とターゲットのエラーの両方に注意してくださいbar.txt
。時間出力のみを希望する場合は、次のものが必要です。
{ time foo.sh 2>&3 3>&-; } 3>&2 2> bar.txt
time
POSIXは、アクションがキーワードか組み込みか(パイプラインタイミングか単一コマンドか)を指定しません。したがって、移植性のために(sh
スクリプトで使用して別のUnix系システムに移植したい場合)、おそらく次のように書く必要があります。
command time -p foo.sh 2> bar.txt
foo.sh
次のように別のシェルを実行しない限り、関数、組み込み、またはパイプのエラー時間を測定したり、個別にリダイレクトすることはできません。
command time -p sh -c 'f() { blah; }; f | cat'
ただし、これは時間に追加の開始時間も含まれることを意味しますsh
。