C программа со скриптом bash - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь запустить программу C внутри bash, моя программа C использует устройство GPS и вычисляет расстояние на основе значений широты и долготы. Проблема в том, что когда я запускаю эту программу C через bash, чтобы получить расстояние, я не могу перенаправить ее вывод в какой-либо файл или переменную. Я пробовал это: output = $ (./ run), но он не работает. для запуска C кода внутри bash я использую следующий код:

#!/bin/bash

echo 'clear'

echo enter file name

read FILE

gcc -o a.out $FILE -lm 
output=$(./a.out) 
echo $output

, когда я не перенаправляю, он показывает значение:


#!/bin/bash
echo `clear`
echo enter file name
read FILE
gcc -o a.out $FILE -lm 

./a.out

[значения GPS ] [1]

Может ли кто-нибудь помочь в этом?

Ответы [ 3 ]

0 голосов
/ 18 июня 2020

Вы не включаете запрошенный журнал отладки, но, судя по вашему снимку экрана, ваша программа никогда не завершается. Он просто остается и записывает значения навсегда. Следовательно, захват никогда не достигает конца, поэтому ваш оператор echo никогда не выполняется.

Вы должны изменить свою программу или вызов так, чтобы он в какой-то момент завершился.

Если вы можете ' t изменить программу, вы можете записать, например, только первые десять строк, используя одно из:

# 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) ) 
0 голосов
/ 18 июня 2020

Спасибо всем за комментарии. Сейчас он работает

#!/bin/bash

echo `clear`
echo enter file name
read FILE
gcc -o a.out $FILE -lm 

stdbuf -oL ./a.out |
  while IFS= read -r line
  do
    echo "Data: $line"
  done

с использованием вышеуказанного кода

0 голосов
/ 18 июня 2020

Используйте флаг -o в g cc, чтобы сначала создать двоичный файл.

Я дам вам пример с использованием кода «Hello World»:

~]# cat hw.c
#include <stdio.h>

int main(){
        printf("Hello World");
        return 0;
}

The bash скрипт:

~]# cat hw.sh
gcc -o hw hw.c
./hw

Затем запустите:

~]# bash hw.sh
Hello World
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...