J'ai essayé d'utiliser la commande time
avec l'option -f
pour formater la sortie du temps, mais j'obtiens le message d'erreur suivant:
-f: command not found
Ensuite, j'ai essayé d'utiliser d'autres options -a
, -o
, etc. et j'obtiens la même erreur. Pas même 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?
Eh bien, même si vous n'aimez pas cela, je vous le ferai relire avec plus d'attention man time
. À la fin de la section EXAMPLES
name__, 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 Shell, nommée time
name__. 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 alors clair que pour utiliser la commande réelle time
name__, vous devez utiliser son chemin explicite: /usr/bin/time
.
De plus, si vous ne souhaitez plus utiliser le shell intégré time
name__, vous pouvez créer un alias permanent comme suit:
alias time='/usr/bin/time'
Cela va écraser le shell intégré dans time
car la commande:
type time
donnera maintenant la sortie suivante:
time is aliased to `/usr/bin/time'
Comme, comme l'expliquent les autres réponses, time
est un mot clé Shell, la seule option disponible 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
Vous devez donc exécuter le time
qui se trouve dans /usr/bin
. Voici quelques façons de le faire:
Utilisez l'exécutable time
à la place:
/usr/bin/time -f %Uuser ls >/dev/null
Utilisez \
pour que votre shell ignore les alias, les identifiants intégrés et les mots-clés, et recherche à la place votre $PATH
pour un exécutable correspondant:
\time -f %Uuser ls >/dev/null
Utilisez le command
construit qui fait la même chose que ci-dessus
command time -f %Uuser ls >/dev/null
Utilisez un autre shell, celui qui n'a pas ce mot clé. Par exemple sh
(qui est en fait dash
sur Ubuntu)
sh -c "time -f %Uuser ls >/dev/null"
Utilisez which
name__, qui effectuera une recherche dans votre $PATH
(OK, celui-ci est idiot)
$(which time) -f %Uuser ls >/dev/null
Les shell bash
et zsh
ont leur commande interne time
name__. Vous devez utiliser
/usr/bin/time -f ...
D'ailleurs, j'ai découvert que (à partir de zsh
name__):
~% which time
time: Shell reserved Word