異なるシェル間のスクリプト実行時間を比較するために、一部のSE回答でbash
は組み込み time
コマンドは次のとおりです。
time bash -c 'foo.sh'
time dash -c 'foo.sh'
...など、テストする各シェルについて。これらのベンチマークは、各シェルをロードして初期化するのに必要な時間をなくすことはできません。それ自体。たとえば、上記の両方のコマンドが次の場所に保存されているとします。フロッピーディスクの読み取り速度が初期の低速デバイス、(124KB/秒)、dash
(~150K実行可能ファイル)はほぼロードされます。7倍より速いbash
(〜100万)、シェルのロード時間は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
ベストアンサー1
注意すべき点はtime
POSIXで指定、そしてAFAICT POSIXに記載されている唯一のオプション(-p
)は、さまざまなシェルで正しくサポートされています。
$ bash -c 'time -p echo'
real 0.00
user 0.00
sys 0.00
$ dash -c 'time -p echo'
real 0.01
user 0.00
sys 0.00
$ busybox sh -c 'time -p echo'
real 0.00
user 0.00
sys 0.00
$ ksh -c 'time -p echo'
real 0.00
user 0.00
sys 0.00