Есть ли альтернатива cat, которая поддерживает небуферизованный вывод?

Есть ли альтернатива cat, которая поддерживает небуферизованный вывод?

Я ищу программу для копирования stdin в stdout, показывая управляющие символы (например cat -v) и не дожидаясь EOF (входные данные поступают из tail -f). У меня GNU|Linux; catустановленный игнорирует -uфлаг.

решение1

GNU catигнорирует -u, потому что его выводвсегда небуферизованный. Таким образом, когда вы запрашиваете небуферизованный вывод с помощью -u, вы его получаете (но вы также получаете его, даже если не запрашивали).

У GNU tailтакое же поведение, всегда без буферизации.

Чтобы доказать это, в одной оболочке я сделал следующее:

while :; do echo -ne "hello\t"; sleep 1;done > testtail

который добавляет слово «привет» с последующим символом табуляции каждую секунду (без переноса строк)

В другой оболочке я сделал ( cat -Tона похожа на cat -v-- она ​​отображает вкладки как ^I):

tail -f testtail | cat -T

что дает мне:

hello^Ihello^Ihello^Ihello^I ...

обновляется каждую секунду.

решение2

catОпция BSD отключила -uбуферизацию вывода. Из man cat:

-u      Disable output buffering.

Связанный контент