Bash 在matlab中调用外部脚本并捕获输出
嘿,我有一个bash命令,它根据读取的一些文件来回显字符串。简单地说就是这样Bash 在matlab中调用外部脚本并捕获输出,bash,matlab,variables,call,Bash,Matlab,Variables,Call,嘿,我有一个bash命令,它根据读取的一些文件来回显字符串。简单地说就是这样 for line in `cat file` do if [ "$line" == "IwantThisLine" ] then echo "True" fi done 我把它保存为自己的脚本。它叫readRef.sh。所以现在我想在matlab中调用它,并将它输出的任何内容存储在一个变量中!我不完全确定如何做到这一点,在系统()上使用evalc()时,我似乎遇到了一个错误。但可能只是我弄乱了报价 我试过类似的
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变量。哦,我明白了。我认为您根本不需要
evalc
。阅读本手册,您只需执行以下操作:
[status, result] = system('echo True; echo "I got a loverly bunch of coconuts"')
而结果
将
True
I got a loverly bunch of coconuts
所以,只要做:
[status, result] = system(['./readRef.sh ' smplBamFile])
evalc
不起作用的原因是它要求它的输入是一个字符串中的Matlab表达式,但您正在将system
的结果传递给它
你可以试试:
evalc("system(['./readRef.sh ' smplBamFile])")
查看我如何将
系统(…)
作为字符串传递?出现此错误的原因是系统(…)
返回它运行的命令的返回代码,而不是它的输出。要捕获其输出,请使用
[~, output] = system(...)
tes = evalc(output);
那么,您能否提供您试图运行脚本的
evalc
/系统
命令以及附带的错误消息?(顺便提一下-当您从bash运行脚本时脚本本身是否工作(即sh./readRef.sh
)是否设置了可执行位?)看起来smplBamFile
可能不是字符串-是否可以执行class(['./readRef.sh'smplBamFile])
?我认为此特定文件在头中没有引用,因为这就是我的脚本读取引用的方式,所以它没有响应任何内容。因此,当我单独运行它时,它返回0。你认为这就是原因吗?如果我输入evalc(0),它会给出完全相同的错误。我相当肯定这就是正在发生的事情。不管怎样,让我们假装它没有给我一个错误。你还能帮我回答原来的问题吗?一个简单的例子就可以了,或者我已经做对了吗?是的,我已经尝试将系统(…)作为字符串传递,但不幸的是,这给了我一个意外的错误。我会尝试你所说的,并让你知道,谢谢。如果你也尝试过将其作为字符串传递,那么请将该尝试和你的错误放在问题中。无论何时你问一个问题,把你所有的尝试和相关的错误信息都放在里面——这将对试图帮助你的人有很大帮助,并防止他们误认为你的问题不是问题。