bash在循环“~$”时删除我的文件/程序>;文件.dat";(gnuplot)
我正在bash上编写一些脚本,用gnuplot绘制数据。但它不起作用 我有一个向命令行抛出数据的程序。 我将数据收集到一个文件中,然后循环这个过程以获得所需的结果。假设我有这个脚本bash在循环“~$”时删除我的文件/程序>;文件.dat";(gnuplot),bash,gnuplot,computation,Bash,Gnuplot,Computation,我正在bash上编写一些脚本,用gnuplot绘制数据。但它不起作用 我有一个向命令行抛出数据的程序。 我将数据收集到一个文件中,然后循环这个过程以获得所需的结果。假设我有这个脚本 N = 10 ./program.exe > data_$N.dat # Creating the data to be plotted for ((i = 0 ; i<1 ; i++)) do # Dummy loop to throw all together to gnuplot echo
N = 10
./program.exe > data_$N.dat # Creating the data to be plotted
for ((i = 0 ; i<1 ; i++)) do # Dummy loop to throw all together to gnuplot
echo "set size square"
echo "set xrange[-$N-1:$N+1]; set yrange[-$N-1:$N+1];"
echo "plot '-' using 1:2"
for((j = 0 ; j <= 9 ; j++)) do
# Throwing the data to gnuplot
echo "cat data_$N.dat"
# Updating the file and overwriting on it
echo "cat data_$N.dat | xargs ./program.exe > data_$N.dat" | bash
echo "e"
echo "pause 0.5"
done
done | gnuplot -persist # Throwing the formatted data to gnuplot
希望是明确的,你可以帮助我:)。谢谢
警察局。我是物理学家。通过
重定向是由shell完成的。因此,执行cat data_$N.dat | xargs./program.exe>data_$N.dat
时发生的第一件事是shell打开data_$N.dat
进行写入并截断它。现在它是空的,所以当cat
启动时,它会找到一个文件,但它已经被截断了
只需将输出重定向到一个临时位置(通常使用
$
返回PID,这样脚本就有点独立)。所以…>tmp_$$.dat
之后,您就可以mv-f tmp_$$.dat data_$N.dat
好了!但是,这很奇怪。。。shell不遵循书面顺序?shell将该命令视为PROGRAM | PROGRAM>FILE
。shell的任务是使管道连接两个程序并打开最终的输出文件。然后执行程序
s,以便它们继承管道/文件作为输入/输出。管道的所有元件同时运行。
./program.exe > data.dat # Making the initial data
begin gnuplot loop
throw data to gnuplot
"cat data.dat | xargs ./program.exe > data.dat" # update data overwriting file
end gnuplot loop
pipe all the script to gnuplot