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

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

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

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

$ 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

答え2

すべてのバージョンの時間が-oおよび--outputパラメーターをサポートするわけではありません。

次のようにコマンドを実行する必要があります。

(time script.sh) 1> /dev/null 2> /tmp/logFile

これにより、script.sh の出力は /dev/null に保存され、結果は /tmp/logFile に保存されます。

STDERRとSTDOUTの両方をログファイルに保存するには、次のように実行できます。

(time script.sh) &> /tmp/logFile

答え3

/usr/bin/timeに出力されるので、stderrリダイレクトする必要があります。

/usr/bin/time foo.sh 2>bar.txt

timeBashの組み込み関数を使用する場合は、別の方法で作成する必要があります。

(time ls) 2>bar.txt

または、GNUはパラメータをtimeサポートしています--output

/usr/bin/time --output bar.txt foo.sh 

答え4

出力と出力をファイルとして取得するには、次のようにしますlstime

(time ls) &> log

timeファイルの出力のみを取得するには、次のようにします。

(time ls) 2> log

関連情報