Основной поток, на который вы указали, это tail -f file | telnet foo | while true; do blah; done
Этот метод получает данные, записанные в файл, в команду telnet, но ничто не берет данные из команды telnet и передает их в сценарий.
Изменение цикла для поддержки tail -f file | telnet foo | while read f; do echo "I got message $f"; done
предоставляет вам данные, отправляемые вам из сеанса telnet, которые затем можно проанализировать.Проблема этой стратегии заключается в том, что вы не можете ничего делать спонтанно, только в ответ на трафик из сеанса telnet.
Вы можете решить эту проблему, запросив время ожидания:
tail -f pingbot.input | telnet irc.freenode.net 6667 | while read -t 2 f || true; do
echo I got message $f;
done
Вы получите пустой $ f по таймауту, полный $ f, если вы получили сообщение.Разбор вывода PRIVMSG из протокола irc оставлен читателю в качестве упражнения.
Цикл tail | telnet | while read f; do ; done
не является традиционным способом выполнения этой задачи.Традиционно вместо этого вы устанавливаете telnet как сопроцесс (coproc).Но в любом случае, вероятно, будет работать.