如何在工作空间中使用参数运行MATLAB自定义脚本

时间:2013-03-19 11:14:21

标签: bash matlab shell

我有一个MATLAB函数,它对先前在工作区中加载的变量执行一些操作。例如:

do_something(A, B, C, ...);

我在MATLAB中使用n的不同子集运行函数A, B, C ...次。输出保存为ASCII,以便使用C ++程序进行进一步处理。

我想说明整个过程。所以我想从shell脚本运行MATLAB函数,然后是C ++程序。例如:

matlab -nojvm -nodesktop -nosplash -r "run matlabTest"; ./c++Test;

但我意识到MATLAB函数需要一些先前未加载的变量。所以,我的问题是如何使用工作空间中的参数运行MATLAB函数? 。工作区保存在同一目录中。

我正在使用MATLAB 7.9.0(R2009b)开发Linux。

我注意到(在阅读/回顾这个问题时)我可以使用system函数在MATLAB中运行linux命令。我已经成功地做到了这一点,但我不会怀疑如何做其他方式。

2 个答案:

答案 0 :(得分:4)

您可以在引号中包含多个MATLAB命令,以;分隔。你可以试试

matlab -nojvm -nodesktop -nosplash -r "mydata = 1; run matlabTest"; ./c++Test;
例如,

。如果你需要很多变量,这会变得冗长或不方便,也许你可以将工作区变量保存到.mat文件(比如mydata.mat),然后将它们加载到:

matlab -nojvm -nodesktop -nosplash -r "load mydata; run matlabTest"; ./c++Test;

PS您不需要run,只需直接致电matlabTest

答案 1 :(得分:0)

为了使用nohup在Ubuntu的后台运行matlab脚本(带参数),以下命令对我有用:

void SearchObjectDescription(std::vector<std::string>& input, Player & player)
{
    auto i = std::find_if(input.begin()+1, input.end(),
        [&](const std::string &s) { return player.InInventory(s); });

    if (i != input.end())
    {
        std::cout << (player.GetInventory().ItemByName(*i)).ExamineObject() << std::endl;
    }
    else
    {
        std::cout << "Object not in inventory!" << std::endl;
    }
}