Что случится, если отключить буферизацию

Привет.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Чтобы результаты вывода софта/скриптов отображались без задержек в реальном времени — отключи буферизацию.

На практике эффект буферизации незаметен, либо софт/скрипты и так работают в реальном времени.

Распространённый случай.

Ты всяко с таким сталкивался: запустил программу, которая пишет данные в файл. И пока софтина не отработает, файл с результатами визуально пустой. Грыжа!

Но хочется же в реальном времени наблюдать, как файл заполняется, и делать выводы. А что, если софтина работает 10 часов? А выхлоп нужен вчера?

/usr/local/sbin/script.sh &> bashdays.log

Проблема этого условного скрипта в том, что файл bashdays.log создаётся сразу, но вывод может оставаться в буфере до завершения скрипта или его принудительного сброса. Как отслеживать прогресс?

Воспользуйся отключением буферизации!

Всё делается с помощью утилиты stdbuf. Утилита изменяет способ буферизации программ.

stdbuf -oL /usr/local/sbin/script.sh &> bashdays.log

Ключ o взаимодействует со стандартным выводом (stdout). А аргумент L означает Line buffered, то есть буферизацию по строкам.

В примере выше буфер очищается после каждой строки вывода. А в файле bashdays.log появится долгожданный результат без мучительного ожидания.

Одно из применений stdbuf:

stdbuf -oL nohup /usr/local/sbin/script.sh &> bashdays.log

Если закрыть вкладку с сессией, скрипт продолжит работу.

Либо можешь воспользоваться утилитой script:

script -c <PROGRAM> -f bashdays.txt

Ключ f выполняет аналогичную функцию: после каждой операции запускается flush, запись на диск.

На этом смею откланяться, хорошего дня/вечера!