bash在循环“~$”时删除我的文件/程序>;文件.dat";(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

我正在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 "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