У меня есть программа a.out, которая будет настроена в некоторой последовательности папок, каждая папка получает a.out и выдаст некоторые результаты в каждой папке. Я пытаюсь выполнять эти же программы параллельно. Если я в папке, я просто делаю ./a.out, и он будет работать. Я должен выполнить a.out в своей папке, потому что a.out ищет файл в текущем каталоге. Так что, если я не в его папке, он не найдет этот файл.
Запуск этих программ является частью другой работы, основанной на rootDir. Я использую MATLAB, поэтому я стараюсь избегать использования cd внутри MATLAB, поскольку это будет перекомпилировать код MATLAB каждый раз, когда я использую cd, и значительно замедлит код.
Я использую код MATLAB для написания CallParallel.sh, в нем у меня есть эта строка:
for i in ${JobsOnThisNode[@]};do echo $i;done | xargs -n1 -P ${SLURM_NTASKS_PER_NODE} sh -c '"$1"' sh;
$ 1, в основном, получает эту команду для каждого пакета параллельных заданий, увеличенных на jname и cname:
cd /mnt/home/thrust2/zf1005/Matlab/GAFit/RunningFolder/$jname/$cname/ && ./a.out
Я протестировал этот код из rootDir, и он успешно запускает эту программу в другой папке. Однако, когда я выполняю его в скрипте bash, я получаю следующие ошибки:
sh: /mnt/home/thrust2/zf1005/Matlab/GAFit/RunningFolder/1/1/: Is a directory
sh: &&: command not found
sh: ./a.out: No such file or directory
Если я правильно понимаю, каким-то образом он не распознает & amp; и cd каким-то образом только проверяет, является ли он каталогом, а не фактически изменяется на этот каталог, и в результате в rootDir нет файла a.out.
Когда я пытаюсь это сделать:
sh '"cd /mnt/home/thrust2/zf1005/Matlab/GAFit/RunningFolder/1/1"'
я получаю:
sh: "cd /mnt/home/thrust2/zf1005/Matlab/GAFit/RunningFolder/1/1": No such file or directory
Любые предложения будут высоко оценены!