bash - programacion - scripts linux ejercicios resueltos
Pasar argumentos a la función de octava desde el script bash (1)
Escribí una función en Octave que toma una lectura de línea de un archivo (una línea a la vez) como argumento de entrada. Utilizo un script bash para leer una línea a la vez desde el archivo y luego pasar eso como argumento a la función de octava desde el script.
Mi script bash se ve así:
#!/bin/bash
while read line
do
octave --silent --eval ''myOctaveFunc("${line}")''
done < "inFileName"
Cuando ejecuto el script anterior, octava arroja errores como:
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
y así..
He podido ejecutar el script de octava myOctaveFunc.m
con argumentos de entrada como helloWorld
desde la línea de comandos. El problema surge cuando intento ejecutarlo desde el script bash.
Mis preguntas son:
1. ¿Cómo puedo ejecutar la función de octava desde dentro del script bash?
2. Estoy usando gvim
para editar el script bash. Cuando escribo en la línea para invocar el script de octava, veo que ${line}
tiene un color diferente en comparación con las circunstancias normales. ¿Es eso debido al ''''
usado para invocar la función de octava? Si es así, ¿debería preocuparme?
Las comillas simples impiden que el shell sustituya la variable:
octave --silent --eval "myOctaveFunc(/"$line/")"
Si la octava le permite usar comillas simples para citar cadenas, se verá un poco más clara (dentro de las comillas dobles, las comillas simples no tienen ningún significado especial):
octave --silent --eval "myOctaveFunc(''$line'')"
Además, desde vim, asegúrese de guardar el archivo en formato Unix para que cada línea no termine con un carácter de retorno de carro :set ff=unix