Совместное использование ping, cut и tee

Информация в вопросе отрывочна. Однако пример вывода показывает больше символов в неверно закодированном дереве, чем можно было бы ожидать. Вероятно, что происходит, так это то, что дерево работает в среде, где оно может отправлять UTF-8. Для используемых графических символов это 3 байта на специальный символ. С одной стороны (локальный или удаленный не имеет значения) OP использует что-то, что перекодирует их в UTF-8, увеличивая количество байтов (поскольку каждый из байтов в выводе ] tree будет в диапазоне 128–255).

Например, если OP работает в xterm (с использованием luit ) и запутал ситуацию, (фактически) сообщив luit, что фактическая кодировка - en_GB , он переведет каждое из этих 128–255 значений в 2–3 байта («обратно» в UTF-8).

Кстати, bash не имеет отношения к вопросу, потому что это tree (отдельная утилита), которая пишет текст.

6
01.02.2016, 21:14
1 ответ

Ваши команды pipe, как не конечный пункт назначения, буферизируют вывод. В конце концов он появится, но только когда накопится достаточно много вывода или команда ping завершится.

Вы можете использовать ping -c 5 google.com, чтобы установить определенное количество пакетов, которые будут отправлены, после чего ping завершится. Ваш вывод вернется, и трубы будут работать, как ожидалось.

Редактирование: другой обходной путь использует stdbuf, чтобы избежать буферизации труб и awk, чтобы избежать внутренней cut буферизации и позволяет пингу работать непрерывно:

ping www.google.com | stdbuf --output=0 awk '{print $1}' | tee /tmp/file
12
29.04.2021, 00:18

Теги

Похожие вопросы