LINUX.ORG.RU
решено  

tail и iconv не дружат


0

0

работает: cat файл | iconv -futf8 -tkoi8r

работает: tail -f файл

не работает: tail -f файл | iconv -futf8 -tkoi8r

оно изображает что tail'ит файл, но не выводит ни строчки. ЧЯДНТ?

* ()

[#]  
Bad_Habit

а tail разве выводит EOF?

* ()
[#] Ответ на: комментарий от Bad_Habit 03.09.2010 15:31:51  

В общем как сделать чтобы файл tail'ился в другой кодировке?

* ()
[#]  

strace показал, что iconv читает, но не пишет, а пишет он по EOF (если tail прибить). А вот как сделать - идей нет пока.

** ()
[#] Ответ на: комментарий от vga 03.09.2010 15:33:26  

P.S. Одна из идей - читать построчно через read и давать iconv одну строку.

** ()
[#] Ответ на: комментарий от vga 03.09.2010 15:35:32  

P.P.S. Вот так.

tail -f /var/log/apache2/access.log | while read line; do echo $line | iconv -futf8 -tkoi8r; done

** ()
[#]  

Пока прочитал, на рубях сделал аналогично:

until STDIN.eof?
        print STDIN.gets
end
* ()
[#] Ответ на: комментарий от tx 03.09.2010 16:14:57  

эээ, ну можно ж и конвертить сразу на рубях, чтоб не дергать iconv на каждую строку, так лучше будет.

** ()
[#] Ответ на: комментарий от vga 03.09.2010 16:16:39  

может вот так watch "tail файл | iconv -futf8 -tkoi8r"? если уж так нужно в реальном времени tail смотреть

()
[#] Ответ на: комментарий от K-Vrat 03.09.2010 16:22:59  

> может вот так watch "tail файл | iconv -futf8 -tkoi8r"? если уж так нужно в реальном времени tail смотреть

И постоянно как обезьяна вверх-Enter-вверх-Enter-вверх...? :)

* ()
[#] Ответ на: комментарий от NightSpamer 03.09.2010 16:53:50  

C watch то что должно iconv'иться просто удаляется.

* ()
[#]  
mironov_ivan

Это из-за буферизации вывода внутри iconv.

***** ()