Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在matlab中调用外部脚本并捕获输出_Bash_Matlab_Variables_Call - Fatal编程技术网

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

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()时,我似乎遇到了一个错误。但可能只是我弄乱了报价 我试过类似的

嘿,我有一个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变量。

哦,我明白了。我认为您根本不需要
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),它会给出完全相同的错误。我相当肯定这就是正在发生的事情。不管怎样,让我们假装它没有给我一个错误。你还能帮我回答原来的问题吗?一个简单的例子就可以了,或者我已经做对了吗?是的,我已经尝试将系统(…)作为字符串传递,但不幸的是,这给了我一个意外的错误。我会尝试你所说的,并让你知道,谢谢。如果你也尝试过将其作为字符串传递,那么请将该尝试和你的错误放在问题中。无论何时你问一个问题,把你所有的尝试和相关的错误信息都放在里面——这将对试图帮助你的人有很大帮助,并防止他们误认为你的问题不是问题。