gnuplot: ¿Puede establecer variables de shell en un script y luego llamarlas?

Sep 10 2020

Quiero poder emitir comandos de shell desde un script gnuplot, como establecer una variable, pero parece que el systemcomando genera una nueva instancia de shell en lugar de emitir comandos a la instancia de shell que ejecuta el script gnuplot. Vea el siguiente script donde la primera línea permite la asignación de $foo, pero la segunda línea no puede acceder a esa variable. En este caso, $foose asigna como una cadena arbitraria en lugar de una referencia al directorio, por lo que\"

#!/usr/bin/gnuplot -p
system "export foo=\"$HOME/path/to/dir\";echo $foo"
system "echo $foo" set datafile separator "\t" #plot "`echo $foo`/bar.dat" using 2:3
plot "<( sed '5p' $foo/bar.dat )" using 2:3

Respuestas

3 Quasímodo Sep 09 2020 at 23:47

Tienes razón: cada systemcomando emite un nuevo shell, por lo que la variable configurada con system "foo=bar"desaparece cuando Gnuplot pasa a la siguiente línea.

Un enfoque muy conveniente en su caso es usar here-docs .

foo="$HOME/path/to/dir" gnuplot -p<<EOF set datafile separator "\t" plot '<(sed "5p" "$foo"/bar.dat)'
EOF

Algunas notas sobre el guión:

  • sed "5p" filesignifica que se trazarán todas las líneas del archivo, pero se duplicará la quinta línea. Si solo pretendía trazar la quinta línea, usesed -n "5p" file

  • Esto llama a Gnuplot pero sigue siendo un script de shell, por lo que es mejor siempre citar variables (como "$foo") para evitar la división de palabras.