Передача аргументов в октавную функцию из скрипта bash - PullRequest
7 голосов
/ 27 июля 2011

Я написал функцию в Octave, которая принимает строку, считанную из файла (по одной строке за раз) в качестве входного аргумента. Я использую скрипт bash, чтобы прочитать строку из файла и передать ее в качестве аргумента функции октавы из скрипта.

Мой bash-скрипт выглядит так:

#!/bin/bash  

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

Когда я выполняю вышеуказанный скрипт, октава выдает такие ошибки, как:

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?
2. Я использую gvim для редактирования скрипта bash. Когда я набираю строку для вызова октавного скрипта, я вижу, что ${line} окрашен по-другому по сравнению с обычными обстоятельствами. Это из-за '', используемого для вызова функции октавы? Если так, я должен волноваться об этом?

1 Ответ

11 голосов
/ 27 июля 2011

Одиночные кавычки не позволяют оболочке подставить переменную:

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

Если октава позволяет использовать одинарные кавычки для цитирования строк, она будет выглядеть немного чище (внутри двойных кавычек одинарные кавычки не имеютспециальное значение):

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

Также в vim сохраните файл в формате unix, чтобы каждая строка не заканчивалась символом возврата каретки: :set ff=unix

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...