【问题标题】:Passing arguments to octave function from within bash script从 bash 脚本中将参数传递给八度函数
【发布时间】:2023-03-16 20:22:01
【问题描述】:

我在 Octave 中编写了一个函数,它将从文件中读取的一行(一次一行)作为输入参数。我使用 bash 脚本从文件中一次读取一行,然后将其作为参数从脚本中传递给 octave 函数。

我的 bash 脚本如下所示:

#!/bin/bash  

while read line
do
  octave --silent --eval 'myOctaveFunc("${line}")'
done < "inFileName"

当我执行上面的脚本时,octave 会抛出如下错误:

error: called from:
error:   /usr/share/octave/3.2.3/m/miscellaneous/fullfile.m at line 43, column 11
error: evaluating argument list element number 2
error: evaluating argument list element number 1
error:   /usr/libexec/octave/packages/gsl-1.0.8/i386-redhat-linux-gnu-api-v37/PKG_ADD at line 47, column 1
error: addpath: expecting all args to be character strings
error: addpath: expecting all args to be character strings
error: addpath: expecting all args to be character strings
error: addpath: expecting all args to be character strings

等等……

我已经能够从命令行运行带有输入参数的八度脚本myOctaveFunc.m,例如helloWorld。当我尝试从 bash 脚本中运行它时,就会出现问题。

我的问题是:
1. 如何在 bash 脚本中运行 octave 函数?
2. 我正在使用gvim 来编辑bash 脚本。当我在行中键入调用 octave 脚本时,我看到 ${line} 的颜色与正常情况相比有所不同。那是因为'' 用于调用八度函数吗?如果是这样,我应该担心吗?

【问题讨论】:

  • 如何在 bash 脚本之外调用您的 octave 脚本?当您在 bash 脚本中输入“echo octave --silent ...”而不是“octave --silent”时,您会看到什么?
  • @Bruno:octave 脚本的调用(在 echo 之后)类似于:octave --silent --eval 'myOctaveFunc(helloWorld)' 而它应该是 octave ... 'myOctaveFunc("helloWorld")'。我试过octave ... 'myOctaveFunc(\"helloWorld\")'。这在带有echo 的 bash 中可以正常工作,但在调用 octave 脚本时会失败。

标签: bash scripting command-line octave


【解决方案1】:

单引号阻止shell替换变量:

octave --silent --eval "myOctaveFunc(\"$line\")"

如果octave允许你使用单引号来引用字符串,它看起来会更干净一些(在双引号内,单引号没有特殊含义):

octave --silent --eval "myOctaveFunc('$line')"

此外,在 vim 中,请确保将文件保存为 unix 格式,这样每一行不会以回车符结尾::set ff=unix

【讨论】:

  • 另外,是否需要:set ff=unix 选项?我在一台 linux 机器上工作,每次从 Windows 回来时都要注意做一个dos2unix
  • 您没有告诉我们有关您的环境的任何信息,所以不,不需要。
  • 当我运行 octave --silent --eval "dbEval(\"hello-world\")" 时它返回给我 warning: function 'dbEval' defined within script file '/home/max/octave-dollar/scripts/dbEval.m'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 2012-12-29
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多