通过写入文件获取后台作业输出

通过写入文件获取后台作业输出

我正在尝试获取我发出的正在运行的后台命令的输出

sudo wminput -r -w -c "$controls_config" > "$temp_output" &
exec 3< "$temp_output"

while true; do
    sleep 1
    read <&3 output
    if [[ "$output" = 'Ready' ]]; then
        echo "Controller $wiimote_counter Connected"
        break
    fi
done

但脚本运行时不会将任何内容写入该文件。仅在我发送 SIGINT 后,它才会将任何内容写入文件(也仅使用文件尝试过,但没有运气)。

还有另一种方法可以按照我想要使用的方式获取后台作业的输出吗?即连续地,直到达到一定的输出。

答案1

感谢@choroba 的评论,我被引导到输出被缓冲的事实。

进一步寻找我发现这个帖子声明 stdout 默认情况下是缓冲的。
另外,查看 wminput 的手册页没有给出快速解决方案,
因此我寻找一种方法来强制从作业 stdout 缓冲区刷新到文件 - 并找到了 stdbuf 命令。标准缓冲区文档

我使用 as-
sudo stdbuf -oL wminput -r -w -c "$controls_config" > "$temp_output" &
其中 -o 代表 stdout
,-L 代表刷新每个换行符上的缓冲区

谢谢你的提示!

相关内容