bash удаляет мой файл во время цикла «~ $ ./program> file.dat» (gnuplot) - PullRequest
2 голосов
/ 23 декабря 2011

Я делаю некоторый скрипт на 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

Итак, в основном я выкидываю отформатированный текст в файл gnuplot, меняя его содержимое, но не меняя имени файла.

Конечно, я не хочу менять имя файла, потому что я делаю вычисления, соответствующие этому шагу с этим файлом, а затем перезаписываю файл обновленными данными. Вид буфера. Вычислительный поток будет

./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

Надежда ясна, и вы можете мне помочь :). Спасибо!

PD. Я физик.

1 Ответ

5 голосов
/ 23 декабря 2011

Перенаправление с > выполняется оболочкой. Поэтому первое, что происходит при выполнении cat data_$N.dat | xargs ./program.exe > data_$N.dat, - это то, что оболочка открывает data_$N.dat для записи и усекает ее. Теперь он пуст, поэтому при запуске cat он находит файл, но он уже обрезан.

Просто перенаправьте ваши выходные данные во временное местоположение (обычно используется $$ в том, что возвращает ваш PID, так что ваши сценарии несколько независимы). Итак, ... > tmp_$$.dat, а затем сразу после этого вы можете mv -f tmp_$$.dat data_$N.dat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...