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 ls
commande, pas celle de time
. Veuillez expliquer pourquoi je ne pouvais pas et comment faire cela.
shell
unix
time
io-redirection
abubacker
la source
la source
Réponses:
vous pouvez rediriger la sortie de l'heure en utilisant,
Parce que vous devez prendre (time ls) comme une seule commande pour pouvoir utiliser des accolades.
la source
&>
s'il vous plaît, où puis-je en savoir plus?&>file
est analogue à>file 2>&1
. Il dirige à la fois stdout et stderr.pas besoin de lancer le sous-shell. Utiliser un bloc de code fera également l'affaire.
ou
la source
2>
s'il vous plaît. Où puis-je en savoir plus?La commande time 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 sur STDOUT.
Si vous souhaitez capturer la sortie du temps, tapez:
Cela capture uniquement la sortie du temps, mais la sortie de ls devient normale pour la console. Si vous souhaitez capturer les deux dans un seul fichier, tapez:
2> redirige STDERR, &> redirige les deux.
la source
le temps est intégré au shell et je ne suis pas sûr qu'il existe un moyen de le rediriger. Cependant, vous pouvez utiliser à la
/usr/bin/time
place, qui accepte définitivement toutes les redirections de sortie.la source
bash time mycmd 2>file
. Ou appelez simplement/usr/bin/time
comme cela a été mentionné.Si vous ne souhaitez pas mélanger la sortie de
time
et la commande. Avec GNU time, vous pouvez utiliser-o file
comme:while
tim
est la sortie du temps,out
eterr
sont stdout et stderr degrep
.la source
La raison pour laquelle la redirection ne semble pas fonctionner
time
est que c'est un mot réservé bash (pas un builtin!) Lorsqu'il est utilisé devant un pipeline. bash (1):Donc, pour rediriger la sortie de
time
, utilisez des accolades:Ou appelez
/usr/bin/time
:la source
J'utilise la redirection de la méthode stdout et stderr avec des accolades pour les tests.
Le
&>>rpt
représente ceci>>rpt 2>&1
mais plus court.Les accolades exécuteront une ou plusieurs commandes dans le shell actuel. Voir: man bash
la source