Shell

gnuplot:你能在腳本中設置 shell 變數,然後再呼叫它們嗎?

  • September 9, 2020

我希望能夠從 gnuplot 腳本發出 shell 命令,例如設置一個變數,但似乎該system命令生成了一個新的 shell 實例,而不是向執行 gnuplot 腳本的 shell 實例發出命令。請參閱以下腳本,其中第一行允許分配$foo,但第二行無法訪問該變數。在這種情況下,$foo被分配為任意字元串,而不是對目錄的引用,因此\"

#!/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

你是對的:每個system命令都會發出一個全新的 shell,所以system "foo=bar"當 Gnuplot 轉到下一行時,設置的變數就消失了。

在您的情況下,一種非常方便的方法是使用here-docs

foo="$HOME/path/to/dir"

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

關於腳本的一些註釋:

  • sed "5p" file表示將繪製文件的所有行,但將重複第 5 行。如果您只想繪製第 5 行,請使用sed -n "5p" file
  • 這呼叫了 Gnuplot 但仍然是一個 shell 腳本,因此最好總是引用變數 (例如"$foo")以防止分詞。

引用自:https://unix.stackexchange.com/questions/608646