Shell
gnuplot:你能在腳本中設置 shell 變數,然後再呼叫它們嗎?
我希望能夠從 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"
)以防止分詞。