2013-07-02 3 views
4

Может ли кто-нибудь сказать мне, как вернуть выход программы из переменной из командной строки?Как вернуть выход программы в переменную?

var = ./a.out params 

Я пытаюсь получить выход программы в переменную во время ее запуска из командной строки.

+2

Вы можете использовать, например, ['popen'] (http://linux.die.net/man/3/popen) или тому подобное. –

+3

Вы хотите получить его в * shell * variable или переменную внутри программы C? Если в оболочке вы должны отредактировать теги своего вопроса, чтобы отразить это, так как не имеет значения, на каком языке запущена программа, которую вы пытаетесь запустить. –

+0

Joachim Pileborg -thanks для ответа я хочу получить значение переменной, которое находится внутри моя программа c в переменную командной строки, то есть «var», чтобы я мог использовать ее в другом скрипте или программе. – pkm

ответ

-1

В дополнение к answer from rasen, чтобы получить переменную из вашей программы во внешнюю среду, вам необходимо распечатать ее до stdout.

Использование синтаксиса, предоставленного в другом ответе, просто принимает все выходные данные от stdout и помещает его в переменную окружения var.

9

Для сохранения результатов программы для stdout в переменной в Unix оболочки, независимо от языковой программы писал, вы можете использовать что-то вроде этого

var=`./a.out params` 

или этого

var=$(./a.out params) 

запомнить не ставить пробелы до или после оператора =.

+2

'$ (./ a.out) 'имеет то преимущество, что вы можете вложить как:' $ (echo $ (echo a)) ', в то время как это невозможно с backticks –

+0

, он будет работать для вывода c-программы. Я так не думаю. – pkm

+3

@mkp Язык, в котором выполнена программа, не имеет значения, присваивания в этом ответе помещают все, что написано в 'stdout', и помещают его в переменную среды' var'. Если программа 'a.out' написана на языках C, C++, Fortran или [Whitespace] (http://en.wikipedia.org/wiki/Whitespace_%28programming_language%29), это не имеет значения. –

0

Вы можете передать значение из вашей программы в оболочку через stdout (как уже было сказано) или с помощью инструкции return в вашей функции main() из вашей программы на C. Однострочник ниже иллюстрирует оба подхода:

echo -e '#include <stdio.h>\n int main() { int a=11; int b=22; printf("%d\\n", a); return b; }' | gcc -xc -; w=$(./a.out); echo $?; echo $w

Выход:

22

11

Переменная a печатается stdout и переменная b возвращается в main(). Используйте $? в bash, чтобы получить возвращаемое значение самой последней вызываемой команды (в данном случае ./a.out).

+0

Почему долгое эхо? используйте кошку с heredoc. Уменьшает путаницу. – anishsane

+0

следует помнить, что статус выхода - это символ без знака, только возвращает значения в диапазоне от 0 до 255 –

1

Для выхода из команды многострочным, вы можете сделать это:

output=$(
#multiline multiple commands 
) 

Или:

output=$(bash <<EOF 
#multiline multiple commands 
EOF 
) 

Пример:

#!/bin/bash 
output="$(
./a.out params1 
./a.out params2 
echo etc.. 
)" 
echo "$output" 
Смежные вопросы