2

Добрый день. Проблема: в разделе% post install файла RPM spec может быть скрипт. Я хочу поместить туда скрипт с выводом в реальном времени, например, индикатор выполнения для процесса после установки. Но весь вывод, созданный командами в этом разделе, сильно буферизируется (я полагаю) Yum, и отображается только тогда, когда раздел полностью выполнен. Вопрос: есть ли способ получить вывод, созданный скриптами внутри% post разделов (скрипты на python или pure pash), сразу или как можно скорее?

Заранее спасибо.

1 ответ1

1

Вы можете перенаправить стандартный stdout вашего сценария на стандартный stdout его родительского процесса. Аналогично для stderr .

#!/bin/bash
exec 1>/proc/$PPID/fd/1
exec 2>/proc/$PPID/fd/2

Такое перенаправление stdout может привести к непредвиденным последствиям или вызвать неприятный сюрприз для того, кто запускает скрипт, пытающийся перехватить и проанализировать его stdout когда этот вывод все равно появится в их терминале.

Вы можете увидеть, как это может сбивать с толку (представьте, что он работает на скрипте, а не аргумент -c )

$ x=$(bash -c 'exec 1>/proc/$PPID/fd/1 && echo text')
text
$ echo "x was $x"
x was 

Во-первых, что-то напечатано, хотя подоболочка должна была захватить стандартный вывод! И тогда x был пуст! Безумие. Похоже, что text пришел из stderr , но это не так.

В идеале у yum просто должен быть флаг для этого; может быть, кто-то должен сделать запрос на тягу;)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .