Bash Shell 脚本 :: 实时发送 STD-OUT?

Bash Shell Script :: Send STD-OUT in Real Time?

在我的工作中,我和我的团队(我们有五个人)在日常工作中使用 Java 程序。我没有要求每个人都在他们的笔记本电脑上安装 Java 和 运行 程序,而是设置了一个小虚拟机,将 Java 代码放在上面,然后构建了一个原始的小网页作为界面.当同事在网页上按下“运行 CODE”按钮时,网页 运行 是一个简单的 bash shell 脚本:

#!/bin/bash

cd /path/to/java/code
runJavaCode.exe > $OUTPUTFILE
echo "Finished running the program!  Output is...\n"
echo "$OUTPUTFILE"
echo "End of script."

这一切都笨拙得可笑,但它符合我们的目的。

好的,问题来了:最近 Java 代码需要超过两分钟才能完成计算。它工作正常,我不关心代码的正确性。但是我的同事发现他们的 Web 浏览器在等待 shell 脚本的输出时超时。浏览器在 Java 代码完成之前放弃。

所以我需要一些解决方案来保持浏览器和脚本之间的 TCP 会话处于活动状态,以便为代码争取更多时间。但是怎么办?

我想到的一个解决方案是:Java 代码在运行时不断打印到 STD_OUT。 shell 脚本将该输出收集到 $OUTPUTFILE,然后 echo 仅 Java 代码完成。但是,难道 shell 脚本无法将 Java 代码输出实时反馈给用户吗?那会解决我的问题。

仅供参考:我的虚拟机是 Ubuntu 22.04 (Jammy Jellyfish)。我正在 运行ning Apache2 ver 2.4.52 作为网络服务器,我的 bash 版本是 5.1.16(1)。

尝试:

runJavaCode.exe | tee $OUTPUTFILE

备注:

  • java 程序输出的副本被写入 $OUTPUTFILE,同时输出也被发送到 stdout
  • 我不知道您的特定网页将如何处理持续的输出流(即,网页可能需要以这种方式编码,以便根据推送自动 'refresh'新数据 - java 程序的标准输出流)