Bashの同様の環境で別の「時間」を呼び出します。

Bashの同様の環境で別の「時間」を呼び出します。

timebashを使用している人は、シェル組み込みと/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 timeTIMEFORMATを次のように高解像度で便利に設定します。%6:E real %6U user %6S sys %P%% cpu %I+%Oio %Fpf+%Ww

/usr/bin/timeは通常10msまたは1msの固定解像度を持ちます。

関連情報