将值从C 程序返回到BASH脚本中



i有一个C 程序(在Linux上),该程序计算一个双重结果,我想编写一个bash脚本,该bash脚本运行该程序的次数次数,并为我平均这些结果。为简单起见,请考虑以下代码:

main.cpp:

int main() {
    cout << "Some other stuffn";
    double result = foo();
    return 0;
}

script.sh:

sum = 0
num = $1
for((i = 0; i < $num; i++)); do
    result = ./a.out;  #store the result somehow?
    sum = $sum + $result
done
avg = $sum / $num
echo "Average: " $avg

是否有一种简单的方法可以将程序的结果传递回BASH脚本?我阅读了有关使用退出代码的信息,但是返回类型是双重的,因此我认为这不会起作用。从字符串输出中解析值是笨拙的,因为程序具有其他终端输出。

执行此操作的UNIX方法是编写有关stderr的非必需数据,并在Stdout上编写实际结果。这样,您可以简单地做

int main() {
    cerr << "This is output that won't be captured." << endl;
    cout << "3.141592" << endl; 
}

并使用命令替换来捕获它:

result=$(./a.out)

一种丑陋的方法不需要更改输出的方法是写入另一个文件描述符:

int main() { 
    char* foo = "3.141592n";
    write(42, foo, strlen(foo));
}

这将使您用:

捕获输出
result=$(./a.out 42>&1 > /dev/null)

请注意,您的Shell脚本有几个语法错误。尝试ShellCheck自动整理其中的许多,并随时发布有关无法解决的问题的问题。

为什么不将返回值用作bash脚本的数据?

int main() {
        return 46;
}

输出如下(是的,是bash脚本):

./a.out ; echo $?
46

如果有双重值,则可以使用此方法:

#include <iostream>
int main() {
        double res = 46.001;
        std::cout << res << std::endl;
        return 0;
}

和输出:

a=`./a.out`; echo $a
46.001

相关内容

  • 没有找到相关文章