2016-12-07 16 views
1

Обычно, если я хочу распечатать вывод команды и, кроме того, записать этот вывод в файл, tee - это решение. Но я создаю скрипт, используя утилиту, которая, похоже, имеет особое поведение. Это инструмент оценки беспроводной сети wps bully.Выход tee не появляется до завершения cmd

Если я запускаю команду хулигана как обычно (без тройника), выход отображается поэтапно. Но если я положу трубку в конец, чтобы зарегистрировать это как | tee "/path/to/my/logfile", выход на экране замерзает. Он ничего не показывает, пока команда не закончится. И после окончания, он показывает все в один снимок (не шаг за шагом), и, конечно, он также выводит вывод в файл журнала.

Пример команды хулигана: bully wlan0mon -b 00:11:22:33:44:55 -c 8 -L -F -B -v 3 -p 12345670 | tee /root/Desktop/log.txt

Почему? Не уверен, что это происходит только с хулиганом или если есть другие программы с одинаковым поведением.

Есть ли другой способ захвата вывода в файл с выходом на экране в реальном времени?

+1

Возможная причина: bully изменяет буферизацию вывода на * полностью буферизованный *, когда stdout не подключен к терминалу (например, к трубе). – Jens

+0

См. [Как сделать вывод любой команды оболочки без буфера?] (Http://stackoverflow.com/q/3465619/4154375). – pjh

ответ

2

Что вы видите, это полная буферизация против буферизации строк. По умолчанию, когда stdout записывает на tty (то есть интерактивно), у вас будет буферизация строк, а по умолчанию - полная буферизация. Вы можете увидеть справочную страницу setvbuf(3) для более подробного объяснения.

Некоторые команды предлагают возможность принудительной буферизации строк (например, GNU grep имеет -line-buffered). Но такой вариант недоступен.

Другой вариант - использовать что-то вроде команды ожидания unbuffer, если вы хотите видеть результат более интерактивно (за счет зависящего от ожидаемого, конечно).

+1

Да, используя unbuffer перед командой сделал трюк ... теперь он показывает выход на экране шаг за шагом и сохраняет файл с помощью «буферизации строк», поэтому моя команда: 'unbuffer bully wlan0mon -b 00: 11: 22: 33: 44: 55 -c 8 -L-F-B -v 3-p 12345670 | tee/root/Desktop/log.txt' – OscarAkaElvis

 Смежные вопросы

  • Нет связанных вопросов^_^