gpt4 book ai didi

linux - 在 bash 脚本中控制可执行文件

转载 作者:太空宇宙 更新时间:2023-11-04 11:23:04 25 4
gpt4 key购买 nike

首先,我不知道如何搜索我想做的事情。

我有一个在终端 (Linux) 中生成输出的执行程序。让我们以一个简单的 C 程序为例:

#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
...

根据这个输出我想:

  1. 启动这个执行程序
  2. “捕获”输出
  3. 如果第 3 列值达到 -0.5,停止/终止执行

你将如何做到这一点?

例如,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。然后我们使用 tail -f 选项监视 output 的更新,该选项在添加行时从文件末尾读取行。然后我们将其通过管道传输到 awk,如果满足条件,它可以运行系统命令来终止程序进程,然后运行另一个命令来更新单独文本文件中的参数,然后运行另一个命令来终止tail 这样它就不会永远卡在后台(awk 也会在 tail 被杀死后退出)。

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

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