
time
bashを使用している人は、シェル組み込みと/usr/bin/time
()を区別する必要があると聞きましたtime(1)
。私はプログラム時間を設定し、echo
文字列リダイレクトを使用して入力を自動化する方法を見つける必要がありました<<<
。結果は次のとおりです。
$ time python3 -c "a=input("");print(a)" <<< "12"
12
real 0m0.023s
user 0m0.020s
sys 0m0.000s
この場合、シェル組み込み関数が呼び出されます。
$ echo "12" | time python3 -c "a=input("");print(a)"
12
0.01user 0.00system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 6524maxresident)k
0inputs+0outputs (0major+593minor)pagefaults 0swaps
time(1)
この場合に呼び出されます。
なぜこれが起こるのですか?環境が違うの?
Ubuntu 14.04 x86_64を使う
答え1
これパイプ構造途中では時間は許可されず、パイプラインの先頭にのみ時間が許可されます。
また、timeは示されているように「シェルキーワード」ですtype time
。
しかし、禁止されているものは何もありません。複合コマンド(そして毎回時間):
time comm1 | ( time comm2 )
したがって、サブシェルを使用して、次のようにこの問題を解決できます。
echo "12" | ( time python3 -c "a=input("");print(a)" )
または、次のようにすることもできます。
echo "12" | { time python3 -c "a=input("");print(a)"; }
答え2
コマンドには2つのタイプがありますtime
。 1つはシェルに組み込まれており、bashに属しています。これが最初の例で見られるものです。二番目はです。/usr/bin/time
これは2番目に見るものです。出力が異なる理由は、出力をシェル組み込みにパイプできないためです。
詳細については、ここをクリックしてください
答え3
パフォーマンス上の理由でコマンド時間を測定したい場合は、/usr/bin/timeを使用せずに代わりにptime(1)(プラットフォームで利用可能な場合)を使用することをお勧めします。 ptimeはナノ秒の解像度を提供します。または、次の最新の Bourne Shell を使用します。 Bourne Shellは、すべての最新のオペレーティングシステムでマイクロ秒の解像度ですべてのフォアグラウンドコマンド(シェル組み込みを含む)の自動タイミングを可能にします。 Bourne Shellですべてのフォアグラウンドコマンドの時間を測定するには、次のように呼び出し、set -o time
TIMEFORMATを次のように高解像度で便利に設定します。%6:E real %6U user %6S sys %P%% cpu %I+%Oio %Fpf+%Ww
/usr/bin/timeは通常10msまたは1msの固定解像度を持ちます。