У меня есть программа 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
Если я правильно понимаю, каким-то образом он не распознает &&, и cd каким-то образом только проверяет, является ли он каталогом, а не фактически переключается на этот каталог, и в результате в ROOTDIR.
Когда я пытаюсь это сделать:
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