良い一日。問題:RPMスペックファイルの%post installセクションでは、スクリプトになる可能性があります。インストール後のプロセスのプログレスバーのように、リアルタイム出力のスクリプトを配置したいと思います。ただし、このセクションのコマンドによって生成されるすべての出力は、(おそらく)Yumによって強力にバッファリングされ、セクションが完全に実行されたときにのみ表示されます。質問:%postセクション内のスクリプト(Pythonまたは純粋なpashスクリプト)によって生成された出力を即座にまたはできるだけ早く取得する方法はありますか?
前もって感謝します。
スクリプトの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
は空でした!狂気。 text
はstderr
から来たようですが、そうではありませんでした。
理想的には、yum
はこれに対するフラグを持っているだけです。多分誰かがプルリクエストをする必要があります;)
/ dev/ttyへのリダイレクトを使用します。
program >/dev/tty