Existe-t-il un outil qui prendra l'entrée de plusieurs fichiers ou canaux et l'écrira sur stdout, sans bloquer les lectures, de sorte que les lignes d'entrée individuelles ressortent intactes? Je veux essentiellement multiplexer un tas d'entrées sur une sortie sans encombrer les lignes.
$ combine file1 <(prog2) ... > nice-output.txt
- Je me fiche de l'ordre de sortie
- Il ne doit pas bloquer tant qu'une entrée contient des données
- Il devrait être efficace (c.-à-d., Je peux voter contre votre one-liner Perl;)
-L
pour exécuter une commande et fusionner la sortie avec le flux actuel et-a
écrire la sortie dans un fichier. Je chercherai plus demain. Si vous donnez un exemple plus détaillé, je vais essayer de le travailler.Si les processus écrivent les lignes dans un seul
write
appel, ce qui oblige les processus à utiliser la mise en mémoire tampon de ligne (généralement désactivée si leur sortie standard n'est pas un terminal), vous pouvez simplement les pointer tous vers un canal.Si les processus n'effectuent que la mise en mémoire tampon des lignes lors de l'écriture sur un terminal, la méthode la plus simple est d'utiliser
script
. C'est un peu maladroit: il ne peut écrire que dans un fichier.Si les programmes écrivent de longues lignes ou n'utilisent tout simplement pas la mise en mémoire tampon des lignes, cette approche ne fonctionnera pas. Vous aurez besoin d'un programme collecteur qui lit et met en mémoire tampon les lignes de chaque entrée séparément et effectue la synchronisation sur les fins de ligne. Il n'y a aucun utilitaire standard avec cette fonctionnalité. J'appuie la suggestion de Caleb
multitail
.Voici un script Python qui lit les lignes produites par plusieurs commandes et les recrache sur sa sortie standard, sans casser une ligne. Je ne l'ai pas beaucoup testé, alors avertissez l'utilisateur. Je ne l'ai pas du tout évalué.
Exemple d'utilisation:
la source
Ouais, le multitail semble lié à la notion de "fenêtre" en tant que sous-ensemble d'un terminal; Je ne pouvais pas le faire jouer bien en tant que composant de pipeline.
Alors semble que nous ne nous hafta cette phalanges fissures
Ahhh ça faisait du bien.
(note: il est testé sur environ deux ensembles d'entrées. des bogues peuvent ou non exister)
la source