視差コマンドの出力をファイルに書き込むことはできますか?

視差コマンドの出力をファイルに書き込むことはできますか?

視差コマンドの出力をファイルに書き込むことはできますか?

たとえば、次のように試しました。

$ time foo.sh > bar.txt

ただし、foo.shからの出力のみがbar.txtに供給されます。

ベストアンサー1

多くのシェルでは、includeとkshzshタイムパイプに使用されるキーワードですbashtime

time foo | bar

fooとコマンドの時間を測定しますbarzsh失敗条件が表示されます)。シェルのstderrにこれを報告します。

time foo.sh > bar.txt

bar.txt起動して実行するのにかかる時間を教えてくれますfoo.sh

出力をリダイレクトするには、次のようにtime開始コンテキストからリダイレクトする必要がありますstderrtime

{ 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

timePOSIXは、アクションがキーワードか組み込みか(パイプラインタイミングか単一コマンドか)を指定しません。したがって、移植性のために(shスクリプトで使用して別のUnix系システムに移植したい場合)、おそらく次のように書く必要があります。

command time -p foo.sh 2> bar.txt

foo.sh次のように別のシェルを実行しない限り、関数、組み込み、またはパイプのエラー時間を測定したり、個別にリダイレクトすることはできません。

command time -p sh -c 'f() { blah; }; f | cat'

ただし、これは時間に追加の開始時間も含まれることを意味しますsh

おすすめ記事