Заставить скрипт оболочки fflush - PullRequest
11 голосов
/ 27 февраля 2011

Мне было интересно, можно ли сказать bash, что за всеми вызовами echo или printf должен последовать последующий вызов fflush() в stdout / stderr соответственно?

Быстрое и грязное решение было бы написать мою собственную реализацию printf, которая сделала это, и использовать ее вместо встроенной, но мне пришло в голову, что мне может и не понадобиться.

Я пишу несколько сценариев сборки, которые запускаются одновременно, для отладки мне нужно действительно нужно видеть сообщения, которые они пишут по порядку.

Ответы [ 3 ]

11 голосов
/ 28 февраля 2011

Если команды используют stdio и подключены к терминалу, они будут сброшены на линию.В противном случае вам нужно будет использовать что-то вроде stdbuf для команд в конвейерной линии http://www.pixelbeat.org/programming/stdio_buffering/

tl; dr: вместо printf ... попытайтесь вставить в скрипт stdbuf -o0 printf .. или stdbuf -oL printf ...

1 голос
/ 30 января 2016

Если вы заставляете файл быть прочитанным, похоже, что буфер очищается. Это работает для меня.

Либо считайте данные в бесполезную переменную:

    x=$(<$logfile)

Или сделать UUOC:

    cat $logfile > /dev/null
1 голос
/ 18 августа 2014

Может быть, "stty raw" может помочь с некоторыми другими приемами обработки конца строки.AFAIK «сырой» режим отключает буферизацию на основе строки, по крайней мере, когда используется для последовательного порта («stty raw </ dev / ttyS0»).</p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...