J'aurais instinctivement accepté la réponse de Satō Katsura; Ca a du sens. Cependant, c'est assez facile à tester.
J'ai testé l'écriture d'un million de lignes à l'écran, l'écriture (ajout) dans un fichier et la redirection vers /dev/null
. J'ai testé chacun d'eux tour à tour, puis j'ai fait cinq répétitions. Ce sont les commandes que j'ai utilisées.
$ time (for i in {1..1000000}; do echo foo; done)
$ time (for i in {1..1000000}; do echo foo; done > /tmp/file.log)
$ time (for i in {1..1000000}; do echo foo; done > /dev/null)
J'ai ensuite tracé le total des temps ci-dessous.
Comme vous pouvez le voir, les présomptions de Satō Katsura étaient correctes. Selon la réponse de Satō Katsura, je doute également que le facteur limitant soit la sortie, il est donc peu probable que le choix de la sortie ait un effet substantiel sur la vitesse globale du script.
FWIW, ma réponse d'origine avait un code différent, qui avait le fichier ajouté et /dev/null
redirigé à l' intérieur de la boucle.
$ rm /tmp/file.log; touch /tmp/file.log; time (for i in {1..1000000}; do echo foo >> /tmp/file.log; done)
$ time (for i in {1..1000000}; do echo foo > /dev/null; done)
Comme le souligne John Kugelman dans les commentaires, cela ajoute beaucoup de frais généraux. La question actuelle, ce n'est pas vraiment la bonne façon de le tester, mais je vais le laisser ici car il montre clairement le coût de la réouverture d' un fichier à plusieurs reprises à partir de l' intérieur du script lui - même.
Dans ce cas, les résultats sont inversés.