web-dev-qa-db-ja.com

RPM .specファイルの%postセクションに記述されたスクリプトのリアルタイム出力を取得するにはどうすればよいですか?

良い一日。問題:RPMスペックファイルの%post installセクションでは、スクリプトになる可能性があります。インストール後のプロセスのプログレスバーのように、リアルタイム出力のスクリプトを配置したいと思います。ただし、このセクションのコマンドによって生成されるすべての出力は、(おそらく)Yumによって強力にバッファリングされ、セクションが完全に実行されたときにのみ表示されます。質問:%postセクション内のスクリプト(Pythonまたは純粋なpashスクリプト)によって生成された出力を即座にまたはできるだけ早く取得する方法はありますか?

前もって感謝します。

2
J. Keker

スクリプトの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 

まず、サブシェルがstdoutをキャプチャしているはずなのに、何かが印刷されました。そして、xは空でした!狂気。 textstderrから来たようですが、そうではありませんでした。

理想的には、yumはこれに対するフラグを持っているだけです。多分誰かがプルリクエストをする必要があります;)

1
szmoore

/ dev/ttyへのリダイレクトを使用します。

program >/dev/tty
0
art