LINUX.ORG.RU

[bash] Сорри за детский вопрос - как бы поймать последнюю строку вывода?

 


0

1

Есть некий процесс, плюющий что то на стандартные вывод и поток ошибок. Хочется отловить последнюю строку выплюнутого, отставив остальное как есть.

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

Поднимать ради этого Python не true, а чего то больше ничего в голову не приходит;-((((

★★★★★
Ответ на: комментарий от megabaks

О! Спасибо... «знал, но забыл»;-)

AIv ★★★★★
() автор топика
Ответ на: комментарий от Pavval

Ну оно конечно... но не совсем то, посокольку остальной то вывод процесса теряется. В общем я выкрутился - процесс мой, и проще оказалось добавить туда опцию, к-я сливает посл строку в заданный файл. Неспортивно, но наименее геморроройно;-)

Но все равно спасибо за внимание;-)

AIv ★★★★★
() автор топика
Ответ на: комментарий от Pavval

Да... так тоже можно.

AIv ★★★★★
() автор топика
Ответ на: комментарий от Pavval

Но все равно, вывод из потока ошибок и стандартный вывод смешиваются неправильно (меняется последовательность строк). Интересно, это как нить лечится?

AIv ★★★★★
() автор топика
Ответ на: комментарий от AIv

>Но все равно, вывод из потока ошибок и стандартный вывод смешиваются неправильно (меняется последовательность строк). Интересно, это как нить лечится?

О_о. Странно. Просто «процесс 2>&1» тоже тогда неправильно перемешивает, так?

Pavval ★★★★★
()
Ответ на: комментарий от Pavval

Именно он и лажает, да. Я раньше с этим сталкивался, но как то не заморачивался, а тут хотелось бы все свалить в один log а фигушки...

AIv ★★★★★
() автор топика
Ответ на: комментарий от Pavval

ХЗ... мне ни разу победить не удавалось.

AIv ★★★★★
() автор топика
Ответ на: комментарий от AIv

процесс 1>stdout.log 2>stderr.log tail -n 1 чтотамтыхотел.log

INFOMAN ★★★★★
()
Ответ на: комментарий от Pavval

> Бага в bash?

*facepalm*

это фича libc, запись(печать) буферизируется, но у stderr и stdout очевидно разные буферы, поэтому на выходе может искажаться порядок. Чтобы этого избежать нужно не буферизировать или буферизировть по строчно — man setvbuf

Либо действительно пофиксить libc, чтобы он как-то определял что два потока задуплены и использовал на них один буфер, но я боюсь что это некорректное поведение.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Угу, я примерно что то такое себе представлял, но сформулировать не мог;-)

Мне тут screen посоветовали.

AIv ★★★★★
() автор топика
Ответ на: комментарий от dilmah

>это фича libc, запись(печать) буферизируется, но у stderr и stdout очевидно разные буферы, поэтому на выходе может искажаться порядок. Чтобы этого избежать нужно не буферизировать или буферизировть по строчно — man setvbuf

Я про другое думал. я думал, что прога печатает в одном порядке, а 2>&1 дает другой.

Буферизация - это далеко не новость. В С++ для этого стоит юзать std::endl вместо '\n'. Но это если есть доступ к сорцам...

Pavval ★★★★★
()
Ответ на: комментарий от Pavval

Сорцы на питоне + там еще куча процессов клубиться.

AIv ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.