Я делал это несколько раз. Но не используйте EOF, потому что вы не можете писать на bash внутри тегов << EOF и EOF. В зависимости от имен файлов вы можете делать это разными способами. </p>
a) Если имена файлов циклические (вроде 1.dat 2.dat 3.dat и т. Д.)
#!/bin/bash
for((i=0;i<1;i++)) do
echo "plot '-' u 1:2"
for((j=1;j<=3;j++)) do
cat $i.dat
echo "e"
done
done | gnuplot -persist
Первый цикл является своего рода буфером для передачи всего этого в gnuplot.
b) Если имена файлов не могут быть зациклены (например, ñlasjkd.dat ajñljd.mov añlsjkd.gif), сначала необходимо переместить их в новую папку. Тогда сделай
#!/bin/bash
ffiles=$(ls | xargs) # a list of the folder's files
# Use the list to pipe all the data to gnuplot using cat
for((i=0;i<1;i++)) do
echo "plot '-' u 1:2 w lp";
cat $ffiles;
echo "e";
done | gnuplot -persist
в) Если вы хотите еще что-то, то есть: хранить информацию об отдельных файлах только в одном файле ... но для обслуживания таблиц данных используйте «индекс» gnuplot (если gnuplot читает две черные линии, угадайте, что другой лист данных)
#!/bin/bash
ffiles=$(ls|xargs)
ls $ffiles > ffiles.list # A file with the folder's files
while read line
do
cat $line;
echo -e; echo -e;
done < ffiles.list > alldata.dat
# ^-feeding ffiles.list to the while loop
# and writing the file alldata.dat
теперь вы можете перейти к gnuplot и получить доступ к одной таблице
plot 'alldata.dat' index 1 u 1:2
и вы увидите первый файл, появившийся в списке "ffiles.list". Если вы хотите увидеть более одного, скажите 4
plot 'alldata.dat' index 1:4 u 1:2
хитро, но легко.