2013-09-13 3 views
0

Я создал сценарий оболочки (.run), который принимает префикс для имен изображений в качестве параметра, а затем вызывает gnuplot. Однако по какой-то причине изображение не сохраняется. Код:Сценарий оболочки, передающий параметр gnuplot, не экспортирует диаграмму (epslatex)

#!/bin/sh 
molecule=$1 

echo "Plotting DFT-ADF PY results for $molecule" 
echo "Tranmission plot (negatory SO)" 
gnuplot -p << EOF 
#!/usr/bin/gnuplot 
set terminal epslatex size 5,3 color colortext 
set output '$molecule_trans.tex' 

plot cos(x) w l title 'cos(x)', sin(x) w l title 'sin(x)' 

EOF 

Для моей бакалаврской диссертации я должен сделать несколько сюжетов, которые являются одинаковыми. Кроме того, вычислительный кластер использует систему qeueing. Для того, чтобы быть верным этой системе, я создал несколько сценариев оболочки, которые автоматически делают вещи. В частности, около 45 симуляций вызывают сценарии оболочки, а затем сценарий оболочки, который входит в каждый каталог симуляций и использует файлы python для оценки данных в файлах [.dat]. Затем для создания графика следует использовать файл gnuplot. Я использую EPSLaTeX, чтобы делать мои рисунки, потому что это намного лучше. Однако в текущей реализации мне потребовалось вручную отредактировать различные латексные файлы, чтобы переименовать изображения.

+0

Я только что определил, что файлы созданы. По-видимому, я сделал ошибку в сценарии оболочки таким образом, что файлы сохраняются как «.eps» и «.tex», которые (естественно) скрыты автоматически. Я отредактировал его так, что он использует $ 1 вместо $ молекулы, и он работает. Надеюсь, что кто-то еще найдет эту тему полезной. – Daimonie

+0

Что касается других решений: все должно быть внутри одного файла? Вы можете, например, есть файл конфигурации для gnuplot, который загружается автоматически или который вы можете включить с помощью 'load 'settings.gp''. Затем вы можете передавать переменные через командную строку, например 'gnuplot -e 'var =' $ var '" general_script.gp'. – Christoph

ответ

2

В случае, если вы будете нуждаться больше переменных, и не хотят в $1, $2 ... беспорядок:

Вы должны использовать скобки вокруг имени переменной

set output '${molecule}_trans.tex' 

, потому что подчеркивание является действительным символ для имен переменных и bash ищет переменную $molecule_trans, см. http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion.

+1

Подсказка для будущих читателей: я всегда заменяю строку gnuplot чем-то вроде скрипта 'cat><< EOF' для диагностики проблемы. У вас есть фактический результат-скрипт. – Bernhard

Смежные вопросы