gnuplot: Você pode definir variáveis de shell em um script e depois chamá-las?
Eu quero ser capaz de emitir comandos shell a partir de um script gnuplot, como definir uma variável, mas parece que o systemcomando gera uma nova instância shell em vez de emitir comandos para a instância shell que está executando o script gnuplot. Veja o script a seguir, onde a primeira linha permite a atribuição de $foo, mas a segunda linha não pode acessar essa variável. Neste caso, $fooé atribuído como uma string arbitrária em oposição a uma referência ao diretório, portanto, o\"
#!/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
Respostas
Você está certo: Cada systemcomando emite um novo shell, então a variável definida com system "foo=bar"desaparece quando o Gnuplot vai para a linha seguinte.
Uma abordagem muito conveniente no seu caso é usar here-docs .
foo="$HOME/path/to/dir" gnuplot -p<<EOF set datafile separator "\t" plot '<(sed "5p" "$foo"/bar.dat)'
EOF
Algumas notas sobre o script:
sed "5p" filesignifica que todas as linhas do arquivo serão plotadas, mas a 5ª linha será duplicada. Se você pretendia representar apenas a 5ª linha, usesed -n "5p" fileIsso chama o Gnuplot, mas ainda é um script de shell, portanto, é melhor sempre citar variáveis (como
"$foo") para evitar a divisão de palavras.