Когда вы вызываете exec
, вы создаете новый процесс, и хотя этот процесс наследует файл, который вы установили как стандартный, он не наследует другие настройки, в частности настройку синхронизации.
Чтобы получить небуферизованный вывод в новом процессе, вам нужно установить его в этом процессе.Если вы не хотите изменять script.rb
, одним из обходных путей может быть создание другого файла с именем somethig, например sync.rb
, содержащего просто:
STDOUT.sync = true
, который затем может потребоваться при запуске вашей команды:
exec 'bundle exec ruby -r./sync script.rb'
Для нового процесса Ruby теперь потребуется sync.rb
, который просто устанавливает режим синхронизации на STDOUT
в true перед выполнением сценария.