大家好。问题:在 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