84 votes

Pourquoi la commande `time` ne fonctionne-t-elle pas avec n'importe quelle option ?

J'ai essayé d'utiliser time avec -f pour formater la sortie de l'heure, mais je reçois l'erreur suivante :

-f: command not found

Ensuite, j'ai essayé d'utiliser d'autres options -a , -o etc. et j'obtiens la même erreur. Même pas time --version ne fonctionne pas ( --version: command not found ).

Ne me dites pas de lire le manuel parce que je l'ai déjà fait plusieurs fois... Toutes ces options sont spécifiées ici. Alors, où pourrait être le problème ?

117voto

Radu Rădeanu Points 156862

Même si tu n'aimes pas, je te conseille de le relire avec plus d'attention. man time . A la fin de EXAMPLES vous trouverez :

  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

Donc, je suppose que vous utilisez bash Shell qui utilise une version interne de time fourni comme un mot-clé Shell. Vous pouvez le vérifier à l'aide de la commande suivante :

type time

et la sortie sera probablement :

time is a shell keyword

Si c'est le cas, alors il est clair, d'utiliser le vrai time vous devez utiliser son chemin d'accès explicite : /usr/bin/time .

De plus, si vous ne voulez plus utiliser le mot-clé Shell time vous pouvez créer un alias permanent comme suit :

alias time='/usr/bin/time'

Cela écrasera le mot-clé Shell. time parce que la commande :

type time

donnera maintenant la sortie suivante :

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

24voto

Stewart Points 1385

Puisque, comme l'expliquent les autres réponses, time est un mot clé Shell, la seule option qui s'offre à vous est -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

Donc, vous devez exécuter le time qui est dans /usr/bin . Voici quelques moyens d'y parvenir :

  • Utilisez le time à la place de l'exécutable :

    /usr/bin/time -f %Uuser ls >/dev/null
  • Utilice \ ce qui amène votre Shell à ignorer les alias et les mots-clés et à rechercher plutôt votre $PATH pour un exécutable correspondant :

    \time -f %Uuser ls >/dev/null 
  • Utilisez le command qui a un effet similaire :

    command time -f %Uuser ls >/dev/null
  • Utilisez un Shell différent, un qui n'a pas un tel mot-clé. Par exemple sh (qui est en fait dash sur Ubuntu) :

    sh -c "time -f %Uuser ls >/dev/null"
  • Utilice which qui cherchera dans votre $PATH (OK, celle-là est stupide) :

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

17voto

Rmano Points 30303

El bash y zsh Les coquilles ont leur propre time commandement. Vous devez utiliser

/usr/bin/time -f ...

BTW, j'ai découvert que l'utilisation (de zsh ):

~% which  time
time: shell reserved word

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X