gpt4 book ai didi

bash - 实时从 stdout 读取内容

转载 作者:行者123 更新时间:2023-12-05 08:59:10 25 4
gpt4 key购买 nike

我有一个外部设备,我需要给它加电,然后等待它正常启动。我想要执行此操作的方法是通过串行端口连接到它(通过 Plink,它是 PuTTY 的命令行工具)并读取它打印的所有文本行并尝试找到表明它已启动的文本字符串适本地。找到该文本字符串后,脚本将继续。

问题是我需要实时阅读这些文本行。到目前为止,我只看到了调用命令然后在该命令完成时处理其输出的方法。或者,我可以通过向命令附加 & 并将输出重定向到文件来让 Plink 在后台运行。但问题是这个文件从一开始就是空的,所以脚本会直接执行。有没有办法等待某个文件的新行并在它出现后读取它?或者有没有人有任何其他想法如何实现这一目标?

这是迄今为止我找到的最佳解决方案:

./plink "connection_name" > new_file &

sleep 10 # Because I know that it will take a little while before the correct text string pops up but I don't know the exact time it will take...

while read -r line
do
# If $line is the correct string, proceed
done < new_file

但是,我希望脚本在找到正确的文本字符串后直接继续。

那么,简而言之,有什么方法可以在命令执行完成之前连续访问命令的输出吗?

最佳答案

这可能是您正在寻找的:

while read -r line; do
# do your stuff here with $line
done < <(./plink "connection_name")

如果你需要 sleep 10 :

{
sleep 10
while read -r line; do
# do your stuff here with $line
done
} < <(./plink "connection_name")

与以下解决方案相比,此解决方案的优势:

./plink "connection_name" | while read -r line; do
# do stuff here with $line
done

(我相信很快就会有人建议)是 while循环不在子 shell 中运行。

构造 <( ... )叫做Process Substitution .

希望这对您有所帮助!

关于bash - 实时从 stdout 读取内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17545750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com