- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如果我有这个matlab函数
function [result] = matlab_test(param1, param2)
disp(sprintf('param1 : %s', param1));
disp(sprintf('param2 : %s', param2));
result = 'hello matlab';
我想在 bash 脚本中调用这个 matlab 函数,例如
matlab -nodesktop -nosplash -nodisplay -r "try, A=matlab_test('test','matlab'); end; quit"
echo $A
我想要这个输出
test
matlab
hello matlab
我的要求是确定是否可以在我的 bash 脚本中使用来自 Matlab 的返回值并通过管道传递它。我只想将我的应用程序分成小组件(文件)并通过管道/参数进行通信。简而言之,我想看看我可以在我的 bash 脚本中包装 Matlab 脚本到什么程度,以便我可以设置我的代码架构。
如果我不能这样做,我将简单地将我需要从 matlab 返回值的部分捆绑到 matlab 脚本中。
最佳答案
您在问两个问题。我会回答这两个问题,包括为什么第二个可能不可能根据您的操作系统(并且在我的操作系统上绝对不可能),然后提供有关问题相关解决方法的建议。
首先,我在让 Matlab 与 shell 交互时使用了这样的脚本。
#!/bin/sh
cat <<EOF | matlab -nodesktop -nosplash -nodisplay
A=matlab_test('$1','$2');
system(['export temp1=' A]); %doesn't work
setenv('temp2',A); %also doesn't work, I'll explain why below
exit
EOF
echo $temp1
echo $temp2
给出输出:
[XXXXXX@compute-0-138 ~]$ ./stack_ex test matlab
Warning: No window system found. Java option 'MWT' ignored
< M A T L A B (R) >
Copyright 1984-2010 The MathWorks, Inc.
Version 7.12.0.635 (R2011a) 64-bit (glnxa64)
March 18, 2011
To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit www.mathworks.com.
>> param1 : test
param2 : matlab
>> >> >>
很明显这两个版本设置环境变量都不行。这就引出了您的第二个问题。
'echo' 失败背后的原因是 system
和 setenv
创建的 shell 在 Matlab 关闭时关闭。也就是说,Matlab 不能在调用它的 shell 之外设置环境变量。
讨论了 Windows 系统的解决方法 in this posting ,它使用 Microsoft 的工具。还提到了here .
我认为 *nix 系统没有从 Matlab 中设置环境变量的解决方法。
这是一种方法,可以执行与您描述的类似的操作。
我假设使用 echo 并不是您真正想要做的。相反,我猜测您希望使用存储在环境变量中的字符串输出,以用于进一步处理 shell 中的命令或脚本。一种可能的解决方法如下:
#!/bin/sh
cat <<EOF | matlab -nodesktop -nosplash -nodisplay
A=matlab_test('$1','$2');
setenv('temp1',A); %doesn't work
[a b] = system(['echo ' '$' 'temp1'])
exit
EOF
给出输出:[XXXXXX@compute-0-138 ~]$ ./stack_ex_3 测试 matlab警告:未找到窗口系统。 Java 选项 'MWT' 被忽略
< M A T L A B (R) >
Copyright 1984-2010 The MathWorks, Inc.
Version 7.12.0.635 (R2011a) 64-bit (glnxa64)
March 18, 2011
To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit www.mathworks.com.
>> param1 : test
param2 : matlab
>> >>
a =
0
b =
hello matlab
这表明命令 echo $temp1
是在 setenv
创建的子 shell 中计算的,temp1 保存分配给它的值。调用 shell 的结果现在存储在 b 中(a 为 0 表示成功)。可以想象,您可以通过系统命令在 shell 中传递您想要执行的全部操作,以便它在子 shell 中运行。不过,我们必须了解您问题的更多细节才能对这种方法进行全面评估。
编辑和跟进 **********************
我能想到的最接近包装 Matlab 和 bash 的是以下技巧。您可以通过以下方式将 Matlab 脚本的输出通过管道传输到 myresult.out
:
#!/bin/sh
cat <<EOF | matlab -nodesktop -nosplash -nodisplay /> myresult.out
A=matlab_test('$1','$2');
disp(['grepMe ' A])
exit
EOF
您可以从 myresult.out
中 grep grepMe
行,通过管道传输到 sed,并仅选择您需要的输出行部分,然后通过管道将其传输到其余的脚本。这与我认为您可以达到您想要做的事情一样接近。
关于bash - 如何在 bash 脚本中从 matlab 获取返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085184/
我需要您在以下方面提供帮助。近一个月来,我一直在阅读有关任务和异步的内容。 我想尝试在一个简单的 wep api 项目中实现我新获得的知识。我有以下方法,并且它们都按预期工作: public Htt
我的可执行 jar 中有一个模板文件 (.xls)。不需要在运行时我需要为这个文件创建 100 多个副本(稍后将唯一地附加)。用于获取 jar 文件中的资源 (template.xls)。我正在使用
我在查看网站的模型代码时对原型(prototype)有疑问。我知道这对 Javascript 中的继承很有用。 在这个例子中... define([], function () { "use
影响我性能的前三项操作是: 获取滚动条 获取偏移高度 Ext.getStyle 为了解释我的应用程序中发生了什么:我有一个网格,其中有一列在每个单元格中呈现网格。当我几乎对网格的内容做任何事情时,它运
我正在使用以下函数来获取 URL 参数。 function gup(name, url) { name = name.replace(/[\[]/, '\\\[').replace(/[\]]/,
我最近一直在使用 sysctl 来做很多事情,现在我使用 HW_MACHINE_ARCH 变量。我正在使用以下代码。请注意,当我尝试获取其他变量 HW_MACHINE 时,此代码可以完美运行。我还认为
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
由于使用 main-bower-files 作为使用 Gulp 的编译任务的一部分,我无法使用 node_modules 中的 webpack 来require 模块code> dir 因为我会弄乱当
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我使用 Gridlayout 在一行中放置 4 个元素。首先,我有一个 JPanel,一切正常。对于行数变大并且我必须能够向下滚动的情况,我对其进行了一些更改。现在我的 JPanel 上添加了一个 J
由于以下原因,我想将 VolumeId 的值保存在变量中: #!/usr/bin/env python import boto3 import json import argparse import
我正在将 MSAL 版本 1.x 更新为 MSAL-browser 的 Angular 。所以我正在尝试从版本 1.x 迁移到 2.X.I 能够成功替换代码并且工作正常。但是我遇到了 acquireT
我知道有很多关于此的问题,例如 Getting daily averages with pandas和 How get monthly mean in pandas using groupby但我遇到
This is the query string that I am receiving in URL. Output url: /demo/analysis/test?startDate=Sat+
我正在尝试使用 javascript 中的以下代码访问 Geoserver 层 var gkvrtWmsSource =new ol.source.ImageWMS({ u
API 需要一个包含授权代码的 header 。这就是我到目前为止所拥有的: var fullUrl = 'https://api.ecobee.com/1/thermostat?json=\{"s
如何获取文件中的最后一个字符,如果是某个字符,则删除它而不将整个文件加载到内存中? 这就是我目前所拥有的。 using (var fileStream = new FileStream("file.t
我是这个社区的新手,想出了我的第一个问题。 我正在使用 JSP,我成功地创建了 JSP-Sites,它正在使用jsp:setParameter 和 jsp:getParameter 具有单个字符串。
在回答 StoreStore reordering happens when compiling C++ for x86 @Peter Cordes 写过 For Acquire/Release se
我有一个函数,我们将其命名为 X1,它返回变量 Y。该函数在操作 .on("focusout", X1) 中使用。如何获取变量Y?执行.on后X1的结果? 最佳答案 您可以更改 Y 的范围以使其位于函
我是一名优秀的程序员,十分优秀!