Я ищу программу для копирования 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.