【发布时间】:2019-11-13 17:10:30
【问题描述】:
我有一个程序 a.out,它将被设置在一些文件夹序列中,每个文件夹都有一个 a.out,并会在每个文件夹中产生一些结果。我正在尝试并行执行这些相同的程序。如果我在文件夹中,我只需执行 ./a.out 即可运行。我必须在其文件夹中执行 a.out,因为 a.out 在当前目录中查找文件。因此,如果我不在其文件夹中,它将找不到该文件。
运行这些程序是另一个基于 rootDir 的作业的一部分。我正在使用 MATLAB,所以我尽量避免在 MATLAB 中使用 cd,因为每次使用 cd 时都会重新编译 MATLAB 代码并大大减慢代码速度。
我用 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 不知何故只检查它是否是一个目录,而不是实际更改到该目录,因此,在根目录。
当我尝试这个时:
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
【问题讨论】:
-
除了 Diego Torres milano 给出的正确诊断:你说你想用 bash 运行它,但你使用的是
sh,而不是 bash。
标签: linux bash matlab executable