Bash 脚本 - 运行应用程序并显示实时输出

Bash 脚本 - 运行应用程序并显示实时输出

我有一个 bash 脚本,它设置一些环境参数,然后运行 ​​C++ 应用程序。

C++ 应用程序在运行时输出显示其当前状态的信息。

目前,我只有在运行完成后才能看到结果。 (大约 1 分钟)是否有办法让 bash 脚本显示应用程序的实时输出?

这是我到目前为止所拥有的:

OUTPUT="$(sudo ./test_app -release)"    
echo $OUTPUT

申请完成后我会得到以下信息:

release acknowledgereleasingstage1stage2released

如果我直接从命令行运行应用程序,则每个进程完成时我都会将其作为新行,而不是应用程序完成时全部合并在一起。

release acknowledge
releasing
stage1
stage2
released

有什么想法如何做到这一点?我想从 bash 脚本调用该应用程序,以避免用户必须运行多个命令。

谢谢。

答案1

如果你想显示输出并且不需要保存它,只需运行命令:

sudo ./test_app -release

如果您想保存输出并显示它,请调用tee复制输出。

OUTPUT=$(sudo ./test_app -release | tee /dev/stderr)

当您重定向输出时,应用程序可能会缓冲它以大块的形式输出,而不是逐行输出。仅当输出是终端时,逐行才是默认设置,而不是当输出是管道或常规文件时。如果您的申请属于这种情况,致电unbufferstdbuff。由于他们的工作方式stdbuf需要通过 sudo 调用,而buffer可以像你一样运行。

OUTPUT=$(sudo stdbuf ./test_app -release | tee /dev/stderr)
OUTPUT=$(unbuffer sudo ./test_app -release | tee /dev/stderr)

答案2

假设您不需要出于任何特定原因存储输出,您可以简单地替换,

OUTPUT="$(sudo ./test_app -release)"    
echo $OUTPUT

sudo ./test_app -release

内置命令和非内置命令(在基本级别)之间的 shell 脚本没有特殊区别。他们都只是执行和输出东西。

相关内容