bashではなくユニバーサル `time`ベンチマークの代替? [閉鎖]

bashではなくユニバーサル `time`ベンチマークの代替? [閉鎖]

異なるシェル間のスクリプト実行時間を比較するために、一部の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

注意すべき点はtimePOSIXで指定、そして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

おすすめ記事