在matlab中调用外部脚本并捕获输出

时间:2012-03-12 23:22:44

标签: bash matlab variables call

嘿所以我有一个bash命令,根据读取一些文件回显一个字符串。说简单就像这样

for line in `cat file`
do
if [ "$line" == "IwantThisLine" ]
then   
echo "True"
fi
done

我把它保存为自己的个人脚本。它叫readRef.sh。所以现在我想在matlab中调用它并将它输出的任何内容存储在变量中!我不完全确定如何做到这一点,我在系统()上使用evalc()时似乎遇到错误。但它可能只是我弄乱报价。

我试过像

这样的东西
evalc(system(['./readRef.sh ' bamfile']))

“bamfile”是一个变量,它只是bamfile路径的一个字符串。

我收到此错误。

>> tes = evalc(system(['./readRef.sh ' smplBamFile])) 
hg18 
??? Undefined function or method 'evalc' for input arguments of type 'double'.

巧合的是,它确实吐出了“hg18”,这就是我想要设置matlab变量的原因。

2 个答案:

答案 0 :(得分:3)

哦,我明白了。我认为你根本不需要evalc。阅读你可以做的system docs

[status, result] = system('echo True; echo "I got a loverly bunch of coconuts"')

result将是

True
I got a loverly bunch of coconuts

所以就这样做:

 [status, result] = system(['./readRef.sh ' smplBamFile])

evalc无效的原因是它要求其输入为字符串中的Matlab表达式,但您传递的是system的结果。

你可以尝试:

 evalc("system(['./readRef.sh ' smplBamFile])")

了解我如何以system(...)作为字符串传递?

答案 1 :(得分:0)

您收到此错误的原因是因为system(...)返回其运行的命令的返回代码,而不是其输出。要捕获其输出,请使用

[~, output] = system(...)
tes = evalc(output);