在服务器上运行 bash 脚本来执行多个 MATLAB 脚本

在服务器上运行 bash 脚本来执行多个 MATLAB 脚本

我不是程序员,只是化学家。我正在编写一个 bash 脚本,我想在服务器上运行它并期望它执行以下操作:

  1. 打开终端
  2. 循环遍历文件夹slave_1,,slave_2...,slave_N 为每个文件夹打开一个选项卡,启动 MATLAB(maltab -nodesktop),cd 到该文件夹​​,然后运行脚本slave_process

以下是我目前所掌握的信息:

#!/bin/bash

for i in {1..5}
do
gnome-terminal --tab  --working-directory="/usr/local/MATLAB/MATLAB_Production_Server/R2015a/bin" --command='./matlab -nodesktop; cd /mnt/projects/slave_$i; -nosplash -r slave_process'
done

exit 0

有人能帮我让脚本运行吗?我不在 sudoers 文件中,因此无法在服务器上更改任何内容。

更新。@muru 的答案确实有效,但它会在每次循环迭代时启动一个新终端,这很麻烦,因为我需要运行大约 200 个 MATLAB 实例。我想在同一个终端中有多个选项卡(或者根本没有终端也可以)。这是我修改后的代码,但它不起作用:

args=()
for i in {1..5}; do
    cmd=working-directory='/mnt/projects/slave_$i' --command='/usr/local/MATLAB/MATLAB_Production_Server/R2015a/bin/matlab -nodesktop -nosplash -r slave_process'
    args+=(--tab-with-profile=Default -e "sh -c \"$cmd; bash\"")
done

gnome-terminal "${args[@]}"

有人可以帮忙吗?

答案1

笔记:

  • 变量扩展在单引号内不起作用''- 因此slave_$i命令的第二部分将保留slave_$i
  • 由于您知道命令的路径matlab,因此请直接使用完整路径运行它,而不是从该目录开始并使用./matlab
  • 如果-nosplash -r slave_process是的参数matlab,它们应该在同一个命令中。
  • exit 0是没有必要的。

考虑一下类似的事情:

#!/bin/bash

for i in {1..5}
do
    gnome-terminal --tab  --working-directory="/mnt/projects/slave_$i" \
      --command='/usr/local/MATLAB/MATLAB_Production_Server/R2015a/bin/matlab -nodesktop -nosplash -r slave_process'
done

相关内容