2016-03-11 6 views
1

Je suis en train d'exécuter la commande suivante, et rien ne s'envoyé à netcatEnvoyer la sortie de la queue rassemblés de netcat à

tail -F file.txt | grep test | nc host 9999 

Si je retire le grep, la queue est suivi avec succès et envoyé à netcat.

Si je viens de lancer ce qui suit, les données revient, donc je sais que les données doivent être envoyées à obtenir la conduite nc:

tail -F file.txt | grep test 

Toutes les idées?

MISE À JOUR

J'ajouté ce qui suit à Unbuffer la sortie canalisé et rien ne passe par:

tail -F file.txt | stdbuf -o0 grep test | nc host 9999 

Lorsque j'allume en mémoire tampon de ligne, la sortie est coupée

tail -F file.txt | grep --line-buffered test | nc host 9999 

workid: ID:ITEST_HGR1-EMS12103.1A156BB6CEB1:10F76E5D 

est envoyé comme

workid: ID:ITEST_HGR1-EMS12103.1A156BB6CEB1:10F7 

Répondre

4

Vous devez changer le comportement de mise en mémoire tampon par défaut de grep. Si vous êtes sur un grep GNU, vous pouvez utiliser grep --line-buffered ou essayer unbuffer.

+0

cela m'a rapproché, sauf qu'il semble que les lignes sont coupées. Par exemple, nc listener imprime maintenant: workid: ID: ITEST_HGR1-EMS12103.1A156BB6CEB1: 10F7 alors que la sortie grepped réelle devrait être workid: ID: ITEST_HGR1-EMS12103.1A156BB6CEB1: 10F76E5D – 75inchpianist

+0

J'ai essayé d'ajouter stdbuf -o0 avant l'instruction grep et rien ne passe par – 75inchpianist

+0

Si vous supprimez netcat sont les lignes coupées, ou pas? –