Como executar comandos no gnuplot usando o shell script?

8

O que eu quero fazer é escrever um script que primeiro inicie um programa e, em seguida, diz-lhe para executar um monte de comandos e, em seguida, saia. Vamos com um exemplo.

Eu escrevi este script myscript.sh e não funciona do jeito que eu quero. O que ele faz é apenas executar o gnuplot e esperar que ele saia e então execute os outros comandos; que obviamente produz erros.

#!/bin/bash
gnuplot
plot sin(x)
pause -1
quit

Eu acho que está claro o que estou tentando fazer; se não, então me avise nos comentários.

    
por Mihir Gadgil 24.11.2015 / 15:13

4 respostas

10

De man gnuplot ou sua página de manual on-line :

   -p,  --persist  lets  plot  windows  survive after main gnuplot program
   exits.

   -e "command list" executes the requested commands  before  loading  the
   next input file.

Então, o que você provavelmente deseja executar é o seguinte comando:

gnuplot -e "plot sin(x); pause -1"

Outras variantes que propus, mas que não são úteis, foram:

gnuplot -p -e "plot sin(x); pause -1"
gnuplot -e "plot sin(x)"
gnuplot -p -e "plot sin(x)"
    
por Byte Commander 24.11.2015 / 15:55
8

Uma maneira é com -persist :

#!/usr/bin/gnuplot -persist
set title "Walt pedometer" font ",14" textcolor rgbcolor "royalblue"
set timefmt "%y/%m/%d"
set xdata time
set pointsize 1
set terminal wxt  enhanced title "Walt's steps " persist raise
plot "/home/walt/var/Pedometer" using 1:2 with linespoints

de outra forma, se você precisa pré-processar os dados, é com um Bash Here Document (consulte man bash ):

#!/bin/bash
minval=0    # the result of some (omitted) calculation
maxval=4219   # ditto
gnuplot -persist <<-EOFMarker
    set title "Walt pedometer" font ",14" textcolor rgbcolor "royalblue"
    set timefmt "%y/%m/%d"
    set yrange $minval:$maxval
    set xdata time
    set pointsize 1
    set terminal wxt  enhanced title "Walt's steps " persist raise
    plot "/home/walt/var/Pedometer" using 1:2 with linespoints
EOFMarker
# rest of script, after gnuplot exits
    
por waltinator 24.11.2015 / 17:36
3

Como explicado nas man pages , gnuplot espera a entrada de um arquivo de comando em o que é chamado de uma sessão em lote . Você pode, por exemplo escreva a linha plot sin(x) em um arquivo myplot e execute gnuplot myplot .

Se você omitir o arquivo de comando, como o seu script, você receberá uma sessão interativa .

    
por Jos 24.11.2015 / 15:23
0

O método here-doc mencionado é altamente útil com o Gnuplot e com muitos outros programas também. Usando variáveis de shell dentro dos comandos do Gnuplot no here-doc, você pode parametrizar seus gráficos com entradas a partir da linha de comando do seu script de shell. Configurando as coisas de maneira cega, você pode produzir lotes em massa a partir de vastas coleções de "big data". Eu costumava produzir gráficos de dispersão de aparência consistente com 20.000 a 80.000 pontos PERPLO em centenas de dinâmicas estruturais. A análise finita é executada usando exatamente esse método. É um método muito poderoso.

    
por Charles 08.04.2018 / 23:34