2016-01-28 4 views
0

Я пытаюсь скомпилировать и запустить код C, зацикливая входной файл через bash. Вот мой код для сценария bash, который я использую для его автоматизации.Looping C компиляция и запуск через BASH

~!/bin/bash 
file=1 
outfile='outputnumber'$file 
readsfile='readsfilename'$file'.txt' 
compilefile=compiler$file'.o' 
gcc -lgsl -lgslcblas -std=c99 filewithccode.c -o $compilefile 
echo "Compilation over" 
./$compilefile $outfile $readsfile 

Так что я в основном пытаются сделать, это собрать filewithcode.c так, что исполняемый файл хранится в виде compiler1, который принимает outputnumber1 и readsfilename1.txt в качестве входных данных. Причина, по которой я хочу сделать это, заключается в том, что я могу зацикливать его на «файл» и автоматизировать его для нескольких файлов (у меня их 45) и автоматизировать выполнение. Но я получаю сообщение об ошибке:

Segmentation fault  (core dumped) ./$compilefile $outfile $readsfile 

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

Любые предложения? Я знаю, что, возможно, "./$" вызывает эту ошибку, потому что BASH вторит «Компиляция над».

+4

'Я пытаюсь использовать разные имена для скомпилированного файла, потому что я пытаюсь запустить их параллельно на сервере, и я не уверен, что компиляция с тем же именем вывода вызовет проблему.' Нет, это не будет , Скомпилируйте его один раз и запустите его так часто, как вам нужно, каждый из которых имеет разные параметры командной строки, если это необходимо. Скорее всего, причина SIGSEGV находится внутри кода 'C', который вы нам не показали. –

+1

Почему вы не эхо ./$compilefile $ outfile $ readsfile, чтобы убедиться, что все работает нормально, также может возникнуть проблема с самим исполняемым файлом, возникли ли у вас какие-либо проблемы с запуском этого вручную? –

+0

Согласитесь, что segfault исходит из вашего C. Просто потому, что он компилируется, не означает, что он не будет segfault, особенно если вы используете gcc для компиляции. Вы пытались скомпилировать вручную и работать за пределами цикла и скрипта bash для тестирования? – tadamhicks

ответ

1

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

comm="./""$compilefile $outfile $readsfile" 
exec $comm 

Это избавило меня от синтаксических проблем с привязкой переменных в прошлом.

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