用bash脚本编写的C程序

用bash脚本编写的C程序,c,bash,gps,C,Bash,Gps,我试图在bash中运行C程序,我的C程序使用gps设备,并根据纬度和经度值计算距离。问题是,当我通过bash运行这个C程序以获得距离时,我无法将其输出重定向到任何文件或变量。我试过这个: 输出=$(/运行) 但它不起作用。 要在bash中运行C代码,我使用以下代码: #/bin/bash 回声“清晰” 输入文件名 读取文件 gcc-o a.out$FILE-lm 输出=$(./a.out) echo$输出 当我不重定向时,它显示值: #!/bin/bash 回音`清晰` 输入文件名 读取文件

我试图在bash中运行C程序,我的C程序使用gps设备,并根据纬度和经度值计算距离。问题是,当我通过bash运行这个C程序以获得距离时,我无法将其输出重定向到任何文件或变量。我试过这个: 输出=$(/运行) 但它不起作用。 要在bash中运行C代码,我使用以下代码:

#/bin/bash
回声“清晰”
输入文件名
读取文件
gcc-o a.out$FILE-lm
输出=$(./a.out)
echo$输出
当我不重定向时,它显示值:


#!/bin/bash
回音`清晰`
输入文件名
读取文件
gcc-o a.out$FILE-lm
/a.out
[gps值


在这方面,任何主体都可以提供帮助吗?

首先使用gcc中的-o标志来创建二进制文件

我将给出一个使用“Hello World”代码的示例:

然后运行:

~]# bash hw.sh
Hello World

您没有包含请求的调试日志,但从屏幕截图上看,您的程序似乎永远不会退出。它只是停留并永远写入值。因此,捕获永远不会结束,因此您的
echo
语句永远不会执行

您应该修改您的程序或调用,以便它在某个点退出

如果无法修改程序,则可以使用以下方法之一仅捕获前十行:

# More canonical way
output=$(./a.out | head -n 10)

# More resilient way, if the program is especially poorly written
output=$( head -n 10 <(./a.out) ) 
#更规范的方式
输出=$(./a.out |头-n 10)
#如果程序编写得特别糟糕,则采用更具弹性的方式

output=$(head-n10谢谢大家的评论 它正在工作

!/bin/bash
回音`清晰`
输入文件名
读取文件
gcc-o a.out$FILE-lm
stdbuf-oL./a.out|
而IFS=读取-r行
做
回显“数据:$line”
完成

通过使用上面的代码

会发生什么情况?如果不重定向,它将显示输出,但不会显示任何内容
output=$(./a.out)
应该捕获输出,它无法逃逸。但是echo$output没有显示任何内容。请使用尝试捕获和显示输出的代码更新您的帖子,然后使用
bash-x yourscript运行它,以获取调试日志并包括该日志?(请确保复制粘贴两个日志,不做任何更改)如果您不使用
-o
将生成名为
a.out
的二进制文件。我很确定您还需要将新文件“标记”为可执行文件。请使用
chmod+x./a.out
。祝您好运。
~]# bash hw.sh
Hello World
# More canonical way
output=$(./a.out | head -n 10)

# More resilient way, if the program is especially poorly written
output=$( head -n 10 <(./a.out) )