Параметры передачи _ Shell Script - Octave Script - PullRequest
3 голосов
/ 18 января 2011

Как я могу передать два параметра (числовые векторы) из сценария оболочки в сценарий с октавой ??

Это идея ..

В "Доказательство.ш"

 #!/bin/bash

 .... do something that processing vector1 vector2 

./draw.m Vector1 Vector2

В "draw.m"


 plot(Vector1, Vector2)

Спасибо !!

Ответы [ 3 ]

3 голосов
/ 18 января 2011

.. И, если позволите, я добавляю небольшой вариант для скрипта Октавы, так как первый был в Matlab;)

Arrays.sh

#!/bin/bash
# create random data
for i in {1..10}; do v1[$i]=$RANDOM; done
for i in {1..10}; do v2[$i]=$RANDOM; done

# save data to file
echo ${v1[@]} > file.txt
echo ${v2[@]} >> file.txt

# call OCTAVE script
octave draw.m

Draw.m

load ("-ascii", "file.txt")
plot(file(1,:), file(2,:))      %# if you want see the graphic
print('figure.ps', '-deps')     %# save the result of 'plot' into a postscript file
exit
1 голос
/ 18 января 2011

Как я упоминал в комментариях выше, вы можете просто сохранить данные в файл, а затем вызвать скрипт MATLAB / Octave, который в свою очередь загрузит данные из файла. Пример:

arrays.sh

#!/bin/bash

# create random data
v1=$(seq 1 10)
for i in {1..10}; do v2[$i]=$RANDOM; done

# save data to file
echo $v1 > file.txt
echo ${v2[@]} >> file.txt

# call MATLAB script
matlab -nodesktop -nojvm -nosplash -r "draw_data; quit" &

draw_data.m

load('/path/to/file.txt','-ascii')   %# load data
plot(file(1,:), file(2,:), 'r')      %# plot
saveas(gcf, 'fig.eps', 'psc2')       %# save figure as EPS file
exit
0 голосов
/ 04 октября 2011

Если vecotrs не слишком длинные, вы можете использовать опции --eval для записи команды октавы в строку.

prove.sh

#!/bin/bash

#  .... do something that processing vector1 vector2 
vector1="[1 2 3 4 5 6 7 8 10]"
vector2="[2 1 5 8 2 9 0 10 8]"

# ..... using octave to plot and image witouth prompting
octaveCommand="draw(${vector1},${vector2});"
echo "Command to exec: ${octaveCommand}"
octave -q --eval "${octaveCommand}"

draw.m

function draw(x,y)
    plot(x,y);
    print("graph.png","-dpng");

Опция -q позволяет избежать появления октавного сообщения при запуске. Если вы не хотите, чтобы окно графика закрывалось, вы можете использовать опцию --persist, чтобы избежать выхода октавы после выполнения команды, но тогда вам нужно будет вручную завершить ее, указав команду exit в терминале. По крайней мере, это работает для октавы 3.2.3. Чтобы увидеть больше опций, вы можете набрать "octave --help" в терминале.

...