2013-04-08 1 views
1

Я не бас, но, пожалуйста, извините упрощенность этого вопроса.Вырезать один вкладыш для компиляции, выполнения и возврата эха?

Я хочу скомпилировать, выполнить и отобразить возвращаемые значения моих программ в одной строке в оболочке Linux. Что-то вроде ...

~$ gcc -Wall -std=c99 program.c && ./a.out && echo $?

Они все работают отдельно, и это, конечно, работает, тоже:

~$ gcc -Wall -std=c99 program.c && ./a.out 
... 
~$ echo $? 
5 
~$ 

Похоже, проблема зная, когда/если ./a.out был успешным, потому что ~$ ./a.out && echo $? делает не работайте!

ответ

3

Оператор && выполняет только следующую команду, если предыдущий был успешным. Вместо этого используйте ;.

gcc -Wall -std=c99 program.c && (./a.out ; echo $?) 

Скобки сделать так echo $? не произойдет, если gcc не удается.

+0

Есть ли причина, по которой вы выбрали скобки, а не фигурные скобки? В [документации] (http://www.gnu.org/software/bash/manual/bash.html#Command-Grouping) говорится, что это создает подоболочку, но почему это выгодно в этом случае просто выполнять в текущей оболочке ? –

+1

@highphi: брекеты требуют большего набора текста. –

+0

Интересно ...! Я знал, что возникла проблема с обнаружением «успеха» программы. – d0rmLife

1
$ gcc -Wall -std=c99 program.c && ./a.out ; echo $? 

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

Смежные вопросы