我可能只是不知道如何表达我的问题,但我一直无法得到我正在寻找的答案。
所以我想做的是在 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/