我遇到了一些挑战:有一个应用程序为我提供了一些后缀表达式,并期望在 5 秒内获得解决方案。如果没有解决方案,它就退出,否则,它提供额外的表达。
界面如下:
<some text>
<expression>
<expecting my result>
<next expression>
<expecting my result>
ETC。
如果只有单个表达式,我想使用tail -1
命令来获取最后一行来获取表达式并使用dc
命令来评估它。但是,由于表达式的数量未知(到目前为止),我无法使用它,并且必须执行一些循环,直到读取的字符串不以数字(即表达式)开头。
因此我想使用两个脚本:
- 启动应用程序始终将文本输出发送到 file1 并在后台执行(脚本 1)
- 读取脚本 file1(脚本 2)的最后一行,评估解决方案并将其发送到 file2(脚本 2)
- 从 file2 读取解决方案,删除 file2(用于下一个解决方案),将应用程序置于前台,发送解决方案,然后将应用程序发送到后台(脚本 1)
然而,这对我来说似乎有点复杂。
有什么建议如何简化程序来解决这个问题?
答案1
我建议研究命名管道,因为你不需要文件对于任何一个。
然而,像这样的东西:
mkfifo mypipe
script1 <mypipe | grep --line-buffered '^[0-9]' | dc >mypipe
应该接近你想要的。不过,这假设输入具有必要的p
命令来dc
实际打印表达式的结果。