Como executar comandos no gnuplot usando o shell script?


10

O que eu quero fazer é escrever um script que primeiro inicie um programa e, em seguida, peça para ele executar vários comandos e depois sair. Vamos dar um exemplo.

Eu escrevi esse script myscript.she ele não funciona da maneira que eu quero. O que ele faz é apenas executar o gnuplot e aguardar o encerramento e, em seguida, executar os outros comandos; o que obviamente produz erros.

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

Eu acho que está claro o que estou tentando fazer; Caso contrário, informe-me nos comentários.

Respostas:


12

De man gnuplotou 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.

Portanto, 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 tão úteis, foram:

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

Os dois primeiros produzem exatamente a saída desejada. Embora -pnão seja de muita utilidade neste exemplo; se você pressionar enter no terminal, o gnuplot sairá e a janela de plotagem se tornará completamente não interativa, exceto pelo comando quit. A saída do 3º vem e vai (não é visível). O último produz saída, mas como o gnuplot é fechado imediatamente, a janela de plotagem é novamente não interativa (também mostra uma plotagem minúscula de 1square cm). Então pause -1é necessário.
Mihir Gadgil

@MihirGadgil Obrigado pelo feedback. Editou minha resposta.
Byte Commander

16

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

outra maneira, se você precisar pré-processar 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

1
Esse (o método shell "here-doc") é provavelmente a resposta genérica que o OP procurou. Ele vai trabalhar para um monte de programas orientados a comandos (e se não, você pode escalar para expect...
Rmano

Além disso, você pode fazer executável os scripts com chmod u+x myscript.gnue executar diretamente com ./myscript.gnu apenas uma nota você esquecer o []no yrange: set yrange [$minval:$maxval].
Hastur

3

Conforme explicado nas manpáginas , gnuplotespera a entrada de um arquivo de comando no que é chamado de sessão em lote . Você pode, por exemplo, escrever a linha plot sin(x)em um arquivo myplote depois executar gnuplot myplot.

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


Ok, entendi que ele está pulando para uma sessão interativa, mas não há como alimentar comandos nessa sessão interativa através do mesmo sctipt? Além disso, você poderia dar uma resposta mais geral (não específica para o gnuplot)? Obrigado!
Mihir Gadgil

Não, nem todos os aplicativos processam a entrada da mesma maneira. Não há como generalizar isso.
24515 Jos Jos

@MihirGadgil - nem todos os programas funcionam da mesma maneira ... quais outros você deseja usar?
Wilf

@ Jos Oh, entendo, obrigado! Wilf Eu usei o Linux no passado, mas não extensivamente, agora tentando aprender mais. Eu não tenho nenhum desses programas em mente; apenas tentando aprender o máximo que posso com esse problema.
Mihir Gadgil

0

O método aqui-doc mencionado é altamente útil com o Gnuplot e com muitos outros programas também. Usando variáveis ​​shell dentro dos comandos Gnuplot no documento aqui, você pode parametrizar seus gráficos com entradas da linha de comando do seu script shell. Ao configurar as coisas com cautela, você pode produzir gráficos em massa a partir de grandes quantidades de "big data". Eu costumava produzir gráficos de dispersão de aparência consistente com 20.000 a 80.000 pontos por lote em centenas de análises finitas de dinâmica estrutural, usando exatamente esse método. É um método muito poderoso.


1
Para completar sua resposta, você poderia adicionar um exemplo de como usar o método aqui mencionado?
Melebius

0

Isso pode ajudar

{#set terminal postfile             
{#set output  "d1_plot.ps"        
set title "Energy vs. Time for Sample Data"    
set xlabel "Time"    
set ylabel "Energy"    
plot "d1.dat" with lines   
pause -1 "Hit Enter to continue"

Clique aqui para mais detalhes

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.