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

How to install a lot of packages from a list in octave?

我想以自动方式安装一些软件包,我尝试使用简单的 for 循环来完成此操作。如下所示。

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

这是第一次尝试 returns 我这 8 次

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

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

MATLAB 和 Octave 都允许

的简单语法
functionname arg1 arg2 ...

通过将其转换为正确的函数调用

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

这意味着为了将变量的 value 作为参数传递(而不是变量 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

请注意,您有两个错别字:names 在第 3 行写成了 nomes(可能是翻译问题),更重要的是,您使用的是 n 而不是 i 在循环中。事实上,不要在 Octave 中使用 i 作为变量:它代表虚数单位,如果您不小心,可能会导致细微的错误。上面代码我改成了k

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

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