首先,我不知道如何搜索我想做的事情。
我有一个exec,它在终端(Linux)中生成输出。
让我们拿出一个简单的C程序a

#include <stdio.h>
int main (int argc, char *argv[]) {
int i=0;
float j=0;
for(i=0; i<=10000000;i++)
  {
    j = i*-1e-5;
    printf (" %d 2.0 %f 4.0 5.0\n",i,j);
  }
}

产出如下:
 0 2.0 -0.000000 4.0 5.0
 1 2.0 -0.000010 4.0 5.0
 2 2.0 -0.000020 4.0 5.0
 3 2.0 -0.000030 4.0 5.0
 ...

根据这些输出,我想:
启动此exec
“捕获”输出
如果第三列值达到-0.5,则停止/终止exec
你要怎么做?
例如,exec未使用以下脚本exec.sh停止:
#/bin/sh
PROG=./a.out
$PROG > output  &
progpid=$!

(tail -fn 0 output & echo $! > tailpid ) | awk -v progpid=$progpid '{
    if($3<=-0.5){
      system("kill "progpid)
      # system( ##update other file )
      system("kill $(<tailpid)")
    }
 }'

有什么想法吗?
提前谢谢

最佳答案

我认为这类构造解决了你的所有问题:

programname > output &
progpid=$!
(tail -fn 0 output & echo $! > tailpid ) | awk -v progpid=$progpid '{
    if( condition ) {
        system("kill "progpid)
        system( ##update other file )
        system("kill $(<tailpid)")
    }
}'

我们在后台运行程序并将输出重定向到output。然后,我们使用tailoutput选项监视更新时的-f,该选项在添加时从文件末尾读取行。然后,我们将它导入到cc,它可以运行一个系统命令来杀死程序进程,如果条件满足,然后运行另一个命令来更新你的单独文本文件中的参数,然后运行另一个命令来杀死cc,这样它就不会永远挂在后台(当cc被杀死后,cc也将退出)。

关于linux - 在bash脚本中控制可执行文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16738454/

10-16 06:57