Если ${num}
должен интерпретироваться оболочкой, он должен быть заключен в двойные кавычки (или внешние кавычки), а не одинарные кавычки.
for num in {0001..1000}
do
(
cd ${num}_1000_solar
sed -i '827s/.*/ if (BigUni==1) fp910=fopen("biguni_'"${num}"'.dat","w");/' binary.c
gcc singl.c binary.c -lm
)
done
Имея 1000 программ, где вы изменить имя файла в исходном коде и перекомпилировать (в a.out
каждый раз) представляет собой злоупотребление C. Вы должны передать имя файла в качестве аргумента программы. Другими словами, упражнение необходимо только потому, что установка глубоко ошибочна.
Кроме того, как правило, я избегаю cd subdir
, а затем по cd ..
в сценариях, когда это возможно. Запустив подкоманду ((
и )
в пересмотренном сценарии), процесс вызывающей оболочки не изменяется при любых изменениях каталога. В конечном счете, это более надежно.
. Достаточно здравый подход - передать параметр 'gcc', например' gcc -DNUM = '$ num'', и отрегулировать строку 827 в файле C, чтобы вместо этого использовать константу NUM. Более здравый подход, по-прежнему предложенный @JonathanLeffler, должен передать этот параметр в качестве аргумента командной строки. – tripleee