3

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

2 ответа2

3

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

-u      Disable output buffering.
3

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

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

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

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 ...

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .