Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: bash: вывод отчёта на терминал и в файл  (Прочитано 2746 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн StoryTeller

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Есть скрипт (Который большой и редактировать каждую команду очень долго)
Он (скрипт) выводит отчёт о своей работе на терминал (по ходу своей работы)
Нужно: Чтобы он дублировал свой вывод в файл $File (т.е. вывод на терминал нужно оставить ++ добавить дубль в файл)
Как это можно реализовать?
« Последнее редактирование: 06 Апреля 2013, 04:52:05 от StoryTeller »

Глупый_Мо

  • Гость

appomsk

  • Гость
Re: bash: вывод отчёта на терминал и в файл
« Ответ #2 : 07 Апреля 2013, 20:22:36 »
может teehttp://ru.wikipedia.org/wiki/Tee
Скорее всего да:
./script | tee FILE
Но не все так просто (для "большого" скрипта). Когда вывод идет и в stdout, и в stderr, его журналирование в файл превращается в огромную головную боль (когда надо сохранить в файле и порядок вывода на терминал, и что есть что - out или error). Задача нечастая и решаемая, но решаемая через такую задницу (мы решили только через двойной прогон).

ЗЫ Так вспомнилось давнее - задание шефа, предоставить ему лог со всем выводом и всеми warn-ингами, и взбучку за то, что на бумаге ему дали одно, а в терминале он видел другое).

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: bash: вывод отчёта на терминал и в файл
« Ответ #3 : 09 Апреля 2013, 08:51:10 »
Но не все так просто (для "большого" скрипта). Когда вывод идет и в stdout, и в stderr ...
./script 2>&1 | tee FILE

appomsk

  • Гость
Re: bash: вывод отчёта на терминал и в файл
« Ответ #4 : 10 Апреля 2013, 19:42:53 »
Если бы так все просто было. Вывод в stderr небуферизирован и выводится сразу, как только увиден '\n', а в stdout, если в файл, то по достижению буфера. Немного экспериментов показали, что, по крайней мере bash скрипты соблюдают порядок, но при любой компиляции, при вашей комбинации - сравнив вывод с файла и терминала, увидете, что все сообщения об ошибках идут на терминал более менее по порядку (поскольку вывод на терминал буферизирован в ядре построчно), а в файле - сначала все то, что в stderr, a потом в stdout, периодами (поскольку тут буферизация поблочно).

Выполните - на любой программе в исходниках, warn всяко будут при компиляции программы нормального размера - make 2>&1 | tee FILE и сравните вывод на терминал - увеличив буфер до бесконечности и "FILE"

« Последнее редактирование: 10 Апреля 2013, 23:47:00 от appomsk »

 

Страница сгенерирована за 0.028 секунд. Запросов: 25.