Maison >développement back-end >tutoriel php >Explication détaillée de la sortie de la commande 'time' sous shell (bash)

Explication détaillée de la sortie de la commande 'time' sous shell (bash)

高洛峰
高洛峰original
2017-02-07 17:30:101744parcourir

Avant-propos

Je pense que tout le monde sait que time est une commande très utile dans bash. Elle peut chronométrer l'exécution d'un script ou d'un programme. Ceci est généralement très pratique pour comparer grossièrement l'efficacité d'exécution d'un programme. Mais vous constaterez que le texte temporel généré par la commande time ne peut pas être simplement redirigé, par exemple vers un fichier texte, et ne peut être affiché qu'à l'écran, ce qui est très gênant pour un timing non interactif.

Par exemple :

$ time find . -name "mysql.sh" >1.txt
 
real 0m0.081s
user 0m0.060s
sys  0m0.020s
 
$ time find . -name "mysql.sh" 2>2.txt
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/src/scripts/mysql.sh
 
real 0m0.068s
user 0m0.040s
sys  0m0.030s

Grâce aux tentatives ci-dessus, il a été constaté que les informations de sortie de l'heure ne peuvent pas être redirigées vers un fichier. Pourquoi ? Parce que time est un mot-clé du shell, le shell a effectué un traitement spécial. Il traitera la ligne de commande suivant la commande time dans son ensemble. Lors de la redirection, il s'agira en fait de la sortie de la commande time elle-même. ne soit pas redirigé.

Le mot-clé time définit une marque. Les informations de synchronisation ne sont pas imprimées sur stderr tant que la commande command(find) n'est pas exécutée. Le mot-clé time nécessite que l'intégralité de la commande et du pipeline, ainsi que les redirections associées, soient avancées. C'est pourquoi une simple redirection ne fonctionne pas pendant un certain temps. Ceci est défini par la syntaxe Bash. La redirection après la commande fait partie de la commande temporelle.

Remarque : la sortie de la commande time est envoyée à l'erreur standard (stderr)

Lorsque la commande time est exécutée, la commande s'exécute au niveau suivant du shell actuel (c'est-à-dire le shell où la commande time est exécutée) du shell, et la sortie de time elle-même est située sur stderr du shell actuel. La redirection comme indiqué ci-dessus entraînera uniquement la redirection de la sortie standard de la commande vers un fichier texte, mais ne produira pas le contenu de sortie du time lui-même.

La première solution consiste à placer la commande time et la ligne de commande à exécuter dans un bloc de code shell, c'est-à-dire entre une paire d'accolades. Faites attention à l'utilisation des espaces et des points-virgules.

$ { time find . -name "mysql.sh"; } 2>2.txt
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/src/scripts/mysql.sh
$ cat 2.txt
 
real 0m0.068s
user 0m0.030s
sys  0m0.040s

La première méthode a réussi, pour résumer, { time command-line; } 2>file Faites attention à l'utilisation des séparateurs.

Une autre façon consiste à utiliser un sous-shell

comme indiqué ci-dessous :

$ (time find . -name "mysql.sh") 2>2.txt
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/src/scripts/mysql.sh
$ cat 2.txt
 
real 0m0.083s
user 0m0.040s
sys  0m0.020s
[root@web186 root]#

La deuxième méthode a également réussi, pour résumer. up, (time ligne de commande) 2>le fichier ici time est immédiatement suivi de parenthèses (c'est également possible, et il n'y a pas besoin de point-virgule à la fin de la ligne de commande. Bien sûr, il est préférable d'utiliser le premier méthode, après tout, démarrer un sous-shell est Cela prend plus de ressources

Résumé

Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article pourra être d'une certaine aide. les études ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer

Pour des explications plus détaillées sur la sortie de la commande "time" sous shell (bash), veuillez suivre le site Web chinois de PHP.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn