linux - Bash捕获运行脚本的输出

标签 linux bash shell

我可能只是不知道如何表达我的问题,但我一直无法得到我正在寻找的答案。

所以我想做的是在 bash 脚本中运行命令或脚本逐行捕获输出并根据某个值检查它。

我已经尝试过了

#!/bin/bash
./runningscript.sh | while read line; do
echo "output $line"
done

#!/bin/bash

./runningscript.sh | {read line echo "output $line"}

两者似乎都执行了给我正常输出的脚本。我想要的是从这个 bash 脚本中处理来自 runningscript.sh 的每一行输出,因为它是输出我不希望它等到 runningscript.sh 完成运行来处理它。

抱歉,我是一个非常偶然且简单的 bash 用户,所以这可能是最愚蠢的问题,但我们将不胜感激任何帮助

最佳答案

您的脚本有效。但是输出直到很晚才出现,甚至可能在命令完成之后才出现?这通常是因为缓冲:runningscript.sh 在其输出通过管道传输到管道中的下一个进程之前必须填充缓冲区,通常为 4 kB。

一个修复方法是使用 unbuffer 命令,它是 expect 包的一部分:

unbuffer runningscript.sh | something_else

这使 runningscript.sh 认为它正在写入交互式终端。因此,它不会缓冲。

有关更多信息,请参阅 https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe

或者,如果您有 GNU coreutils 7.5 或更高版本,您可以使用 stdbuf 禁用输出缓冲。命令:

stdbuf -oO runningscript.sh | something_else

关于linux - Bash捕获运行脚本的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21059878/

相关文章:

Bash 脚本错误 : unexpected EOF while looking for matching `' '

php - 如何自动叫出名字?

bash - 在忽略点字符的正则表达式的同时搜索精确字符串

bash - 在 bash 中模拟按键

bash - 在 macOS 上计算 Bash 中的日期/时间差异

bash - Jenkins 在控制台输出页面中显示 echo 命令

regex - 使用 linux shell 对数据进行排序

c - 在 Raspberry PI 上用 C 从图像中读取 RGB 数据

linux - 如何使用 ffmpeg(批处理)将新音频(不是混合)添加到视频中?

shell - hadoop在win10中,hadoop版本会导致找不到类org.apache.hadoop.util.VersionInfo,我该怎么办?