bash: force exec avais processus de mémoire sans tampon stdout

J'ai un script tel que:

#!/bin/bash
exec /usr/bin/some_binary > /tmp/my.log 2>&1

Problème est que some_binary envoie tous ses journalisation vers la sortie standard, et de mise en mémoire tampon qu'il fait en sorte que je ne vois qu'une sortie en morceaux de quelques lignes. C'est ennuyeux quand quelque chose est coincé et j'ai besoin de voir ce que la dernière ligne dit.

Est-il possible de faire stdout sans tampon avant que je ne l'exec qui affectera some_binary de sorte qu'il est plus utile de l'exploitation forestière?

(Le script est seulement de quelques variables d'environnement avant le exec, une solution en perl ou python serait également envisageable.)

  • Dennis réponse est tout à fait exact. Voici pourquoi. Programmes sur Unix qui utilisent C stdio pour la sortie de la mémoire tampon lors de la sortie est de ne pas aller à un terminal (améliore les performances de beaucoup) moins dit de ne pas avec setvbuf; presque personne ne s'en soucie. Le expect système (dont unbuffer est une application standard) utilise la magie noire avec Unix pseudo-terminaux (pty-s) pour exécuter des programmes avec un terminal qui n'est pas un vrai terminal, de sorte que le enveloppés programme n'a pas de tampon de sa sortie. Il est intelligent, mais attention: la plupart des systèmes ont un nombre limité de pty-s; naturellement sans tampon programme est meilleur.
  • BTW, cela ne fonctionne pas si bien sur Windows. C'est parce que attendre sur cette plate-forme utilise le débogage de magie au lieu de la borne de la magie (car c'est un domaine où Windows est très différent).
  • Merci. J'ai décidé d'opter pour la modification de some_binary de faire la bonne chose au lieu de compter sur la magie noire. expect est grand, mais je ne veux pas de ça ici...
InformationsquelleAutor bstpierre | 2010-07-26