2014-04-25 2 views
0

Je rencontre un problème et j'ai eu des difficultés à trouver une solution en ligne. Mon code rejoue un fichier journal et se connecte à un serveur externe en utilisant netcat lors de l'écriture du fichier.Problème de script Pipe to Shell

Voici un exemple rapide de mon code de travail, je vais expliquer le problème par la suite.

# function that watches input for '$servertag' variable 
serverwatch() { 
    while read data 
    do 
    if [ `strindex "$data" "$servertag"` -ge 0 ]; then 
     .... 
     nc <server_ip> 1234 
     .... 
    fi 
    done 
} 

# Tail the log file and pipe to functions 
tail -f messages | serverwatch 

Le problème est que si la connexion est établie avec succès, les données des fichier 'messages est en cours d'passepoilées jusqu'à netcat. Je fais une analyse basique sur les données localement, mais je ne sais pas comment empêcher les données d'être envoyées via netcat.

Je devrais rapidement noter que je cherche à avoir ce travail sur la plupart des builds DD-WRT, donc j'essaye de ne pas installer de nouveaux paquets. Aussi, bash semble être cassé/minimal sur la construction que j'ai, donc j'essaie d'éviter bash.

Veuillez me faire savoir si vous avez des questions, des solutions ou des références à d'autres questions qui vous aideront à résoudre ce problème.

Merci,

James

Répondre

2

netcat hérite du descripteur de stdin. Rediriger il d'ailleurs au lieu, tels que:

nc <server_ip> 1234 < /dev/null 

netcat ferme malheureusement la connexion lorsqu'il atteint en fin de l'entrée, donc si vous voulez que la connexion reste ouverte, vous pouvez utiliser le drapeau -d.

nc -d <server_ip> 1234 < /dev/null 
+0

Cela a du sens, merci pour l'aide. Il semble que le paquetage netcat manque le drapeau 'd' sur cette installation. Il lance 'nc: option invalide --d' – James