Pourquoi la commande 'time' ne fonctionne-t-elle avec aucune option?

55

J'ai essayé d'utiliser la commande time avec l'option -f pour formater la sortie du temps, mais j'obtiens l'erreur suivante:

-f: command not found

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

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

    
posée user258266 14.03.2014 - 18:50
la source

3 réponses

79

Eh bien, même si vous ne l'aimez pas, je vais vous relire avec plus d'attention man time . À la fin de la section 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 le shell bash qui utilise une version interne du shell, de time . Vous pouvez vérifier cela en utilisant la commande suivante:

type time

et le résultat sera probablement:

time is a shell keyword

Si tel est le cas, il est clair que pour utiliser la vraie commande time , vous devez utiliser son chemin explicite: /usr/bin/time .

De plus, si vous ne voulez plus utiliser le shell intégré time , vous pouvez créer un alias permanent comme suit:

alias time='/usr/bin/time'

Cela va écraser le shell intégré time car la commande

type time

donnera la sortie suivante maintenant:

time is aliased to '/usr/bin/time'
    
réponse donnée Radu Rădeanu 14.03.2014 - 18:56
la source
20

Puisque, comme l'expliquent les autres réponses, time est un mot-clé shell, la seule option disponible est -p :

[email protected] ~ $ 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 plutôt le fichier exécutable time :

    /usr/bin/time -f %Uuser ls >/dev/null
    
  • Utilisez \ pour faire en sorte que votre shell ignore les alias, les fichiers intégrés et les mots-clés et recherche plutôt dans votre $PATH un exécutable correspondant:

    \time -f %Uuser ls >/dev/null 
    
  • Utilisez le paramètre command qui fait la même chose que ci-dessus

    command time -f %Uuser ls >/dev/null
    
  • Utilisez un autre shell, un autre sans mot-clé. Par exemple sh (qui est en fait dash sur Ubuntu

    sh -c "time -f %Uuser ls >/dev/null"
    
  • Utilisez which , qui cherchera dans votre $PATH (OK, celui-ci est idiot)

    $(which time) -f %Uuser ls >/dev/null
    
réponse donnée terdon 14.03.2014 - 19:10
la source
16

Les shells bash et zsh ont leur commande interne time . Vous devez utiliser

/usr/bin/time -f ...

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

~% which  time
time: shell reserved word
    
réponse donnée Rmano 14.03.2014 - 18:54
la source

Lire d'autres questions sur les étiquettes