異なるシェル間でスクリプトの実行時間を比較するために、一部のSEの回答は、次のようにbash
の組み込み time
コマンドの使用を提案しています。
time bash -c 'foo.sh'
time dash -c 'foo.sh'
... など、すべてのシェルをテストします。このようなベンチマークでは、各シェルがそれ自体をロードして初期化するのにかかる時間を排除できません。例えば、上記のコマンドの両方が上に格納されたと仮定初期フロッピーディスクの読み出し速度と遅いデバイス、(124キロバイト/秒)、 dash
(〜150K実行)についてロードする7Xより速くbash
(〜1M)、シェル読み込み時間はtime
数値を歪めます-これらのシェルの事前読み込み時間は、シェルが読み込まれた後のfoo.sh
各シェルの下の実行時間の測定には関係ありません。
各シェル内から実行できるスクリプトタイミング用に実行するのに最適なポータブルで一般的なユーティリティは何ですか?したがって、上記のコードは次のようになります。
bash -c 'general_timer_util foo.sh'
dash -c 'general_timer_util foo.sh'
注意:移植性や汎用性がないため、シェル組み込み time
コマンドはありません。
さらに、utilがシェルの内部コマンドとパイプラインにかかる時間をベンチマークでき、ユーザーが最初にそれらをスクリプトにラップする必要がない場合はさらに良いでしょう。このような人工的な構文は役に立ちます:
general_timer_util "while read x ; do echo x ; done < foo"
一部のシェルtime
はこれを管理できます。たとえばbash -c "time while false ; do : ; done"
動作します。システムで何が機能するか(そして機能しないか)を確認するには、次のことを試してください。
tail +2 /etc/shells |
while read s ; do
echo $s ; $s -c "time while false ; do : ; done" ; echo ----
done
/usr/bin/time
?