Я играю с Netcat и успешно создал эхо-сервер, подобный этому:
mkfifo fifo
cat fifo | nc -l 3000 > fifo
Затем я хотел бы применить некоторое преобразование к данным, прежде чем они будут отражены:
cat fifo | nc -l 3000 | rev > fifo
# Or:
cat fifo | rev | nc -l 3000 > fifo
Но ни один из вышеперечисленных не работает. То же самое происходит, когда я использую любую программу преобразования текста, а не только rev
. Но если я заменю rev
на cat
, он снова сработает:
cat fifo | nc -l 3000 | cat > fifo
Это наводит меня на мысль, что есть что-то особенное в том, как cat
использует стандартный вход и стандартный выход. (По сравнению с rev
, tr
и другими подобными программами для преобразования текста.)
Что тут происходит? Почему вставка rev
в конвейер ломает эхо-сервер? Действительно ли cat
особенный, и если да, то как?