如何从八度的列表中安装很多包?

时间:2016-02-10 18:00:57

标签: octave packages

我想以自动方式安装一些软件包,而我正在尝试使用简单的for循环。如下所示。

   pkgs = '../pkgs';
   names = dir(fullfile(pkgs, '*.tar.gz')); 
   n = numel(nomes);
   for i = 1:n
        pkg install names(n).name
   end

这是第一次尝试8次返回给我

warning: file names(n).name does not exist

我正在寻找一种方法来获取names.name的ans值。

2 个答案:

答案 0 :(得分:3)

您可以使用' glob()'而不是所有代码。获取tarball列表,然后单个pkg()调用来安装所有这些。像这样:

fpaths = glob ("pkgs/*.tar.gz");
pkg ("install", fpaths{:});

答案 1 :(得分:1)

MATLAB和Octave都允许使用

的简单语法
functionname arg1 arg2 ...

将其翻译为正确的函数调用

functionname('arg1','arg2',...);

这意味着为了将变量的作为参数传递(而不是变量 names 本身),您必须使用函数形式:

pkgs = '../pkgs';
names = dir(fullfile(pkgs, '*.tar.gz')); 
n = numel(names);                    %// fixed your typo here
for k = 1:n
     pkg('install',names(k).name)    %// changed here, also n -> i -> k
end

请注意,您有两个拼写错误:{3}在第3行(可能是翻译问题)中写为names,更重要的是,您使用nomes而不是{{1 }} 在循环。事实上,不要在{8}中使用n作为变量:这代表虚构单位,如果你不谨慎,可能会导致细微的错误。我在上面的代码中更改为i