У меня есть папки с именами ouput00035023031 для output000035023035. Я написал сценарий bash для перебора каждой папки и входа в нее. После входа в папку я хочу запустить программу barycorr. Что требует трех входов. Входными данными являются имена файлов * cl.evt
. Код показан ниже:
for i in $(seq -f "%03g" 1 5); do
cd output0003502303$i
echo -e "sw00092413002xpcw3po_cl.evt
sw00092413002xpcw3po_cl_bary4.evt
sw00092413002sao.fits.gz" | barycorr ra=253.467570 dec=39.760169
cd ..
done
Мне нужно сначала ввести имена файлов sw * pcw3po_cl.evt
, во-вторых, имя файла, которое я хочу сохранить, например sw * xpcw3po_cl_bary4.evt
, а в-третьих, путь, по которому находится файл sw * sao.fits.gz
. *
меняется в зависимости от того, в какой папке я нахожусь. Как теперь написать сценарий для запуска этой программы внутри каждой папки.
Если я правильно понимаю, вы должны быть в состоянии сделать что-то вроде этого:
for i in $(seq -f "%03g" 1 5); do
printf '%s\n' "output0003502303${i}/sw00092413${i}"{xpcw3po_cl.evt,xpcw3po_cl_bary4.evt,sao.fits.gz} |
barycorr ra=253.467570 dec=39.760169
done
Пояснение: printf '%s\n'
выведет каждый из следующих аргументов (часть %s
), за которыми следуют новые строки (часть \n
) -- то есть, каждый на отдельной строке. printf
гораздо более управляем для таких вещей, чем echo
.
Что касается этих аргументов, каждый из них состоит из имени папки и префиксов имен файлов, а затем {xpcw3po_cl.evt,xpcw3po_cl_bary4.evt,sao.fits.gz}
часть расширяется до каждого из этих суффиксов. По сути, это сокращение для:
"output0003502303${i}/sw00092413${i}"xpcw3po_cl.evt
"output0003502303${i}/sw00092413${i}"xpcw3po_cl_bary4.evt
"output0003502303${i}/sw00092413${i}"sao.fits.gz
Это то, что нужно? Если нет, пожалуйста, уточните.