J'ai essayé de rediriger la sortie de la commande time, mais je n'ai pas pu:
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
Dans le fichier, je peux voir la sortie de la commande ls
, pas celle de time
. Veuillez expliquer pourquoi je n'ai pas pu et comment procéder.
vous pouvez rediriger la sortie de temps en utilisant,
(time ls) &> file
Parce que vous devez prendre (time ls) comme une seule commande pour pouvoir utiliser des accolades.
pas besoin de lancer sub Shell. Utiliser un bloc de code fera aussi l'affaire.
{ time ls; } 2> out.txt
ou
{ time ls > /dev/null 2>&1 ; } 2> out.txt
Le temps de commande envoie sa sortie à STDERR (au lieu de STDOUT). C'est parce que la commande exécutée avec le temps normalement (dans ce cas ls) sort vers STDOUT.
Si vous souhaitez capturer la sortie du temps, tapez:
(time ls) 2> filename
Cela ne capture que la sortie du temps, mais la sortie de ls est normale à la console. Si vous souhaitez capturer les deux dans un seul fichier, tapez:
(time ls) &> filename
2> redirige STDERR, &> redirige les deux.
le temps est intégré à Shell et je ne sais pas s'il y a moyen de le rediriger. Cependant, vous pouvez utiliser /usr/bin/time
à la place, qui accepte définitivement toutes les redirections de sortie.
Si vous ne voulez pas mélanger la sortie de time
et la commande. Avec GNU fois, vous pouvez utiliser -o file
comme:
/usr/bin/time -o tim grep -e k /tmp 1>out 2>err
tandis que tim
est une sortie de temps, out
et err
sont stdout et stderr de grep
.
La raison pour laquelle la redirection ne semble pas fonctionner avec time
est que c'est un mot réservé à bash (pas un builtin!) Lorsqu'il est utilisé devant un pipeline. bash (1):
Si le temps réservé Word précède un pipeline, le temps écoulé ainsi que le temps utilisateur et système consommé par son exécution sont signalés à la fin du pipeline.
Donc, pour rediriger la sortie de time
, utilisez des accolades:
{ time ls; } 2> filename
Ou appeler /usr/bin/time
:
/usr/bin/time ls 2> filename