Как запустить исполняемый файл в другой папке с помощью скрипта bash?

У меня есть программа 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

Любые предложения будут высоко оценены!

0
задан 3 July 2019 в 06:13

0 ответов

Другие вопросы по тегам:

Похожие вопросы: