2014-04-25 3 views
0

У меня проблема, и у меня возникли проблемы с поиском решения в Интернете. Мой код обрабатывает файл журнала и подключается к внешнему серверу с помощью netcat, когда файл записывается.Pipe to shell script issue

Вот краткий пример моего рабочего кода, я объясню проблему позже.

# 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 

Вопрос заключается в том, что если соединение успешно установлено, данные от файла «сообщения» идет по трубопроводу до Netcat. Я выполняю базовый анализ данных локально, но я не знаю, как остановить передачу данных через netcat.

Я должен быстро заметить, что я ищу эту работу для большинства DD-WRT-сборников, поэтому я стараюсь не устанавливать новые пакеты. Кроме того, bash, кажется, разбит/минимален на сборке, который у меня есть, поэтому я стараюсь избегать bash.

Пожалуйста, дайте мне знать, если у вас есть вопросы, решения или ссылки на другие вопросы, которые помогут в решении этой проблемы.

Спасибо,

Джеймс

ответ

2

Netcat наследует дескриптор STDIN. Перенаправление его откуда-то еще вместо этого, например, как:

nc <server_ip> 1234 < /dev/null 

Netcat, к сожалению, закрывает соединение, когда оно достигает конца входного текста, так что если вы хотите, чтобы соединение остается открытым, вы можете использовать -d флаг.

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

Это имеет смысл, спасибо за помощь. Похоже, что пакет netcat пропускает флаг 'd' на этой установке. Это бросает «nc: недопустимый вариант --d» – James