なぜ `time`コマンドはどのオプションでも動作しないのですか?


61

timeコマンドを-fオプション付きで使用して時間の出力をフォーマットしようとしましたが、次のエラーが表示されます。

-f: command not found

次に-a、他のオプション-o、などを使用しようとしましたが、同じエラーが発生します。さえtime --version動作しません(--version: command not found)。

私はすでに何度もそれをしているので、男を読むように言わないでください...これらのオプションはすべてそこで指定されています。それで、どこに問題があるのでしょうか?


sudo apt-get install --reinstall time助けて?
ジョブイン

9
それとも、内部シェルtime/usr/bin/time
Rmano

回答:


91

さて、あなたがそれを気に入らなくても、私はあなたにもっと注意してもう一度読んでもらいますman timeEXAMPLESセクションの最後にあります:

  Users of the bash shell need to use an explicit path in order to run
  the external time command and not the shell builtin variant.  On system
  where time is installed in /usr/bin, the first example would become
       /usr/bin/time wc /etc/hosts

そのtimeため、シェルキーワードとして提供されるの内部バージョンを使用するbashシェルを使用すると想定しています。次のコマンドを使用してこれを確認できます。

type time

出力はおそらく次のようになります。

time is a shell keyword

これが当てはまる場合は、明らかであり、実際の timeコマンドを使用するには、明示的なパスを使用する必要があります/usr/bin/time

さらに、シェルキーワードを使用したくない場合は、次のように永続的なエイリアス作成timeできます

alias time='/usr/bin/time'

timeコマンドは次の理由でシェルキーワードを上書きします。

type time

次の出力が表示されます。

time is aliased to `/usr/bin/time'

5
シェルビルドコマンドの場合:{info time}および{type time}。バイナリコマンドの場合:{which time}および{man time}
Michael Martinez

@Michael info timeはバイナリについてです。help timeビルトインについてです。
wjandrea

はい、申し訳ありませんが、「ヘルプ」を考えていましたが、「情報」が出てきました
マイケル・マルティネス

21

他の答えが説明してtimeいるように、シェルキーワードなので、利用できる唯一のオプションは-p次のとおりです。

terdon@oregano ~ $ help time
time: time [-p] pipeline
    Report time consumed by pipeline's execution.

Execute PIPELINE and print a summary of the real time, user CPU time,
and system CPU time spent executing PIPELINE when it terminates.

Options:
  -p    print the timing summary in the portable Posix format

だから、あなたが実行する必要があるtimeことがでます/usr/bin。以下にいくつかの方法を示します。

  • time代わりに実行可能ファイルを使用します。

    /usr/bin/time -f %Uuser ls >/dev/null
  • \whichを使用すると、シェルはエイリアスとキーワードを無視し、代わりに$PATH一致する実行可能ファイルを検索します。

    \time -f %Uuser ls >/dev/null 
  • command同様の効果を持つビルトインを使用します。

    command time -f %Uuser ls >/dev/null
  • そのようなキーワードを持たない別のシェルを使用してください。例sh(実際dashにはUbuntu上にあります):

    sh -c "time -f %Uuser ls >/dev/null"
  • を使用してwhich、検索します$PATH(OK、これはばかげています):

    $(which time) -f %Uuser ls >/dev/null

複製ビルトイン-反対を行うための方法がありtime、通常とは/usr/bin/time?すなわち、bashスクリプトをダッシュ​​に変換します。
ダンM.

@DanM。分かりません。組み込みが必要な場合はtime、実行しtimeます。スタンドアロンの実行可能ファイルが必要な場合は、実行し/usr/bin/timeます。
テルドン

time私の知る限り、Ubuntuのデフォルトシェルには組み込み機能はありません。組み込みのスクリプトを同じ動作のスタンドアロンに変換したいと思います。
ダンM.

@DanM。次に使用しますtime。利用可能な方を呼び出します。これは、bashの組み込みおよびdashのスタンドアロンになります。を使用すると/usr/bin/time、bashとdashの両方で、常にスタンドアロンが呼び出されます。しかし、おそらく新しい質問をして、必要な動作を説明する必要があるようです。あなたがそうするなら私に知らせてください、そして、私は努力してみます。
テルドン

ええ、しかし、ビルトインとスタンドアローンでは、構文/意味が大きく異なります。まあありがとう。自分で対処する方法がわからない場合は、新しい質問をします。
ダンM.

17

bashそしてzshシェルはその内部持つtimeコマンドを。使用する必要があります

/usr/bin/time -f ...

ところで、私は(からzsh)を使用することを発見しました:

~% which  time
time: shell reserved word
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.