Inicia una sesión interactiva en gnuplot y ejecuta algunos comandos cuando se abre

2

Cuando ejecuto mi script, debería

  1. Abre un terminal con gnuplot (sesión interactiva)
  2. Ejecutar algunos comandos gnuplot.
  3. La sesión interactiva se mantiene abierta. (el usuario puede ejecutar comandos)

He probado el -e Indicador que ejecuta el código, pero el terminal se cierra y no es interactivo.

los -p La bandera permite que la ventana de la trama sobreviva, que es menos de lo que necesito.

También he intentado cargar un script gnuplot en el -e -flag, con la esperanza de que eso inicie una sesión interactiva, pero sin éxito.


Mi solución actual es enviar pulsaciones usando xte, que funciona, pero es un poco hacky. ¿Hay mejores soluciones?

Gilles Castel
fuente

Respuestas:

0

La siguiente secuencia de comandos hará lo que está pidiendo como lo entiendo. Ejecutará una secuencia de comandos gnuplot de forma no interactiva y luego continuará la misma sesión de gnuplot desde la línea de comandos. Los comentarios en el script indican dónde debe colocar los comandos no interactivos.

#!/bin/bash - 

# Cheap 'trick' to show gnuplot prompt
# There are better ways
prmpt () { (echo -n "gnuplot> " >&2) }

# Function that serves as a pipe to gnuplot; 
# non-interactively then interactively
gnuplotInPipe () {
  # simple example from http://gnuplot.sourceforge.net/demo/simple.html
  # All non interactive stuff goes here:
  echo "set title \"Simple Plots\" font \",20\""
  echo "set key left box"
  echo "set samples 50"
  echo "set style data points"
  echo "plot [-10:10] sin(x),atan(x),cos(atan(x))"
  # end of non-interactive gnuplot commands
  (echo "Type 'quit' to exit" >&2)
  prmpt 
  # Here we read in lines (terminated with newline)
  # and pipe them directly to the same gnuplot
  # session
  while true; do
    read -er cmd
    if [ "$cmd" == 'quit' ]; then
      break
    fi
    echo "$cmd"
    prmpt 
  done
}

# Call gnuplotInPipe and pipe it's output
# to gnuplot
gnuplotInPipe | gnuplot 

Notas:

  1. El método que utilizo para emular el indicador de gnuplot es un truco rápido que, sin duda, se puede mejorar y en realidad es completamente innecesario.

  2. Si esto no es lo que está tratando de hacer, proporcione los comandos que está ejecutando (ha intentado) desde el terminal, así como un extracto suficiente del script gnuplot al que está llamando.

  3. Para mejorar esto, eche un vistazo a tuberías con nombre . Si desea mantener un script como este para uso a largo plazo, me gustaría ir por esa ruta por razones de mantenimiento. Este script está obteniendo un resultado muy similar con más métodos de fuerza "bruta".

    Por ejemplo, estoy usando stderr para cosas que no van a gnuplot por conveniencia: el indicador, la información de comando para salir. Esos serían mejor manejados con una tubería con nombre.

Argonauts
fuente
¡Genial! Esto era exactamente lo que quería, y menos intrépido que lo que tenía.
Gilles Castel
0

Si está en un sistema * nix (estoy usando Linux), entonces todo se ve como un archivo, lo que significa que podemos leer nuestra sesión actual de terminal como si fuera un archivo normal.

Coloqué lo siguiente al final de mi secuencia de comandos gnuplot para obtener el nombre de mi terminal y 'cargarlo' como lo haría con una secuencia de comandos normal:

set title 'Interactive session'
plot 'mydata.dat'
  ︙
etc
  ︙
tty=system("tty")   # execute the command "tty" in OS and store output
load tty            # load the tty like a file

De esta forma, no recibes ningún aviso, pero está funcionando bien para mis propósitos. Puedes seguir escribiendo en el terminal; golpear Entrar (o Regreso , o como se llame su clave de fin de linea) enviará la línea a la sesión gnuplot. Ctrl + re Saldrá de la sesión como de costumbre.

sputnick1124
fuente
0
gnuplot -e "print 'here I am'" -

Deberia trabajar

bibi
fuente