gnuplot: ¿Puede establecer variables de shell en un script y luego llamarlas?
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
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" fileEsto 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.