Comment faire de sortie de toutes les commandes shell sans tampon?
Est-il un moyen d'exécuter des commandes shell sans le tampon de sortie?
Par exemple, hexdump file | ./my_script
ne passe d'entrée de hexdump à my_script dans tamponnée morceaux, et non pas ligne par ligne.
En fait, je veux savoir une solution générale la façon de faire toute commande sans tampon?
- plus upvoted question unix.stackexchange.com/questions/25372
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, vous ne pouvez pas le faire sans laide des hacks. L'écriture d'un tube (ou le lire) s'allume automatiquement la pleine mise en mémoire tampon et il n'y a rien que vous pouvez faire à ce sujet :-(. "La ligne de mise en mémoire tampon" (qui est ce que vous voulez) n'est utilisé que lors de la lecture/écriture d'un terminal. Le laid hacks exactement cela: Ils se connectent d'un programme à un pseudo-terminal, de sorte que les autres outils de la conduite de lecture/écriture à partir de ce terminal en ligne de mode de mise en mémoire tampon. Tout le problème qui est décrit ici:
La page a également quelques suggestions (le fameux "laid " hacks") ce qu'il faut faire, c'est à dire à l'aide de
unbuffer
ou tirant quelques trucs avecLD_PRELOAD
.Essayer
stdbuf
, inclus dans GNU coreutils et donc pratiquement n'importe quelle distribution Linux. Ceci définit la longueur de la mémoire tampon d'entrée, de sortie et d'erreur à zéro:unbuffer
pour moi.stdbuf
passé tous les signaux (SIGUSR2
dans mon cas) j'ai envoyé à l'command
(qui est ce que je voulais arriver), alors queunbuffer
n'a pas l'air de vouloir.stdbuf -o0 bash
exécute une session complète avec tous mes scripts et alias disponibles, et pas de tampon de sortie sur les commandes, ce qui est exactement ce que je voulais. Mise en mémoire tampon a été restauré sur la sortie de cebash
instance. J'utilise Ubuntu 16.04.La commande
unbuffer
de laexpect
paquet désactive le tampon de sortie:Ubuntu Man: annuler les tampons - annuler les tampons de sortie
Exemple d'utilisation:
Vous pouvez également utiliser la
script
de commande pour la sortie dehexdump
ligne-buffered (hexdump
sera exécuté dans un pseudo terminal astuceshexdump
dans la pensée de son écriture à sa sortie standard (stdout) à un terminal, et non d'une pipe).stdbuf
a échoué, mais le script fonctionne comme un charme. Le programme des tampons de sortie lorsqu'il est joué àtee
, mais pas lors de l'exécution dans le terminal. Ainsi, le script fonctionne! Merci!script
'sman
page référencé par ceci, "Certaines commandes interactives, telles quevi(1)
, créer des ordures dans le fichier d'enregistrement de fichier. Script qui fonctionne le mieux avec des commandes qui ne sont pas de manipuler l'écran, les résultats sont destinés à imiter un papier terminal".