将命令作为变量传递给另一个程序?

时间:2018-08-02 20:31:01

标签: linux bash gnuplot

我正在创建一个交互式脚本,该脚本允许我使用Gnuplot绘制数据文件的特定部分。这些文件包含多个仪器数据通道,我想在绘图上一起绘制指定的通道。目前,我只能使用脚本独立绘制每个通道。

for ycolumn in $ycolumns; do 

    gnuplot -p << EOF
    set datafile separator ","
    set autoscale
    set grid
    set xlabel "Time"
    set ylabel "Data"
    set title "$graphTitle"
    plot "$FILE" using $xcolumn:$ycolumn lt rgb "red" with lines t " "
    EOF

这是独立绘制每个通道的代码。要将它们绘制在一起,我需要绘制线条看起来像这样

plot "$FILE" using $xcolumn:$ycolumn1 lt with lines t " ","$FILE" using $xcolumn:$ycolumn2 lt with lines t " ", etc...

我的问题是,如果可能的话,我如何在gnuplot外部创建一个for循环,该循环将每个列命令(使用$ xcolumn:$ ycolumn1 lt并在行“ t”处附加“ $ FILE”)附加到变量,然后附加该变量传递给Gnuplot内的plot命令?

我当时正在考虑使用Expect,但我想不出一种方法来实现此脚本的自动化。

1 个答案:

答案 0 :(得分:0)

最直接的方法可能是首先组装整个plot命令(如“那个其他人”在评论中所提到的),然后在此文档中使用它:

plotCmd=""
plotCmdDelim="plot"
for ycolumn in $ycolumns
do
    plotCmd="${plotCmd}${plotCmdDelim} '${FILE}' using $xcolumn:$ycolumn lt rgb 'red' with lines t ' '"
    plotCmdDelim=","
done

gnuplot -p << EOF
set datafile separator ","
set autoscale
set grid
set xlabel "Time"
set ylabel "Data"
set title "$graphTitle"
${plotCmd}
EOF