开发者社区> 问答> 正文

如何使用bash脚本在其他文件夹中运行可执行文件?

我有一个程序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,只能以某种方式检查它是否是目录,而不是实际更改为该目录,因此,在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

展开
收起
祖安文状元 2020-01-06 15:58:45 720 0
1 条回答
写回答
取消 提交回答
  • 为了简化操作,您可以创建一个以dir作为参数的运行程序脚本

    #! /bin/bash
    cd "$1" && /path/to/a.out
    
    

    然后runner从调用xargs。

    顺便说一句,a.out每个目录只需要1 而不是1。

    2020-01-06 15:58:57
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Shell 脚本速查手册 立即下载
小程序 大世界 立即下载
《15分钟打造你自己的小程序》 立即下载