如何获取 RPM .spec 文件的 %post 部分中编写的脚本的实时输出?

如何获取 RPM .spec 文件的 %post 部分中编写的脚本的实时输出?

大家好。问题:在 RPM spec 文件的 %post install 部分中可以有一个脚本。我想在那里放一个带有实时输出的脚本,比如安装后过程的进度条。但是此部分中命令生成的所有输出都被 Yum 强缓冲(我猜想),并且仅在部分完全执行时显示。问题:有没有办法立即或尽快获取 %post 部分中的脚本(python 或纯 pash 脚本)生成的输出?

提前致谢。

答案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 

首先,尽管子 shell 应该捕获 stdout,但还是打印了一些东西!然后,x却是空的!太疯狂了。看起来好像是text来自stderr,但事实并非如此。

理想情况下yum只需为此设置一个标志;也许有人应该提出拉取请求;)

答案2

使用重定向到/dev/tty:

program >/dev/tty

相关内容