GNU/Linux >> Tutoriels Linux >  >> Linux

Rediriger la sortie d'une commande dans 'time Command' ?

J'essaie de chronométrer quelque chose en utilisant :

/usr/bin/time myCommand

Cependant, depuis /usr/bin/time écrit dans stderr, si myCommand écrit également sur stderr, j'obtiendrai plus qu'une simple sortie de temps sur le flux. Ce que je veux faire, c'est rediriger toute la sortie de myCommand vers /dev/null , mais continue d'écrire la sortie de l'heure dans stderr. En utilisant un exemple myCommand qui écrit dans stderr de ls /nofile , nous voyons (évidemment) qu'il n'y a aucune sortie avec ce qui suit :

$ /usr/bin/time ls /nofile 2> /dev/null
$

Sans aucune redirection, nous voyons à la fois la sortie de ls (vers stderr) et la sortie de l'heure (également vers stderr) :

$ /usr/bin/time ls /nofile
ls: cannot access /nofile: No such file or directory
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps

Ce que je veux, c'est quelque chose qui produit simplement :

$ /usr/bin/time ls /nofile > RedirectThatImAskingFor
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps

Des idées ?

Réponse acceptée :

En ksh, bash et zsh, time est un mot-clé, pas une fonction intégrée. Les redirections sur la même ligne s'appliquent uniquement à la commande chronométrée, pas à la sortie de time lui-même.

$ time ls -d / /nofile >/dev/null 2>/dev/null

real    0m0.003s
user    0m0.000s
sys     0m0.000s

Pour rediriger la sortie de time lui-même dans ces shells, vous devez utiliser un niveau de regroupement supplémentaire.

{ time mycommand 2>&3; } 3>&2 2>mycommand.time

Si vous utilisez la version GNU du module autonome time utilitaire, il a un -o option pour écrire la sortie de time ailleurs que stderr. Vous pouvez faire du time écrire au terminal :

/usr/bin/time -o /dev/tty mycommand >/dev/null 2>/dev/null

Si vous souhaitez conserver la sortie de time sur son erreur standard, vous avez besoin d'un niveau supplémentaire de mélange des descripteurs de fichiers.

/usr/bin/time -o /dev/fd/3 mycommand 3>&2 >/dev/null 2>/dev/null

Avec n'importe quel time , vous pouvez invoquer un shell intermédiaire pour effectuer les redirections souhaitées. Invoquer un shell intermédiaire pour effectuer des actions supplémentaires telles que cd , redirections, etc. est assez courant : c'est le genre de petites choses pour lesquelles les shells sont conçus.

/usr/bin/time sh -c 'exec mycommand >/dev/null 2>/dev/null'

Linux
  1. Comment ajouter la sortie à un fichier ?

  2. Comment rediriger la sortie de system() vers un fichier ?

  3. Rediriger la sortie de la commande vers le fichier et le terminal

  4. Comment rediriger la sortie d'une commande vers un fichier lorsque la commande demandera des entrées utilisateur ?

  5. Rediriger la sortie de la commande time sous unix vers une variable bash ?

Commande de temps Linux

Comment rediriger la sortie de la commande shell

Suivi du temps avec Timewarrior en ligne de commande

Rechercher du texte sur la sortie du terminal ?

Comprendre la commande time sous Linux

Comment rediriger la sortie de la commande time vers un fichier sous Linux ?