Чтение каталога в сценарии оболочки

Я не знал gnuplot's команда "мультиграфика". Похоже, что Вы смогли делать то, из чего Вы хотите с разумным использованием set origin, но я советовал бы делать help multiplot и тщательно чтение, что это должно сказать.

До "сохранения числа" идет, я могу интерпретировать тот из двух путей:

  1. Сохраните все gnuplot конфигурация в тот момент, включая последнюю команду "графика". Вы сделали бы save "somefile.load" в gnuplot> подсказка. В некоторое более позднее время Вы сделали бы load "somefile.load" в gnuplot> подсказка для регенерации всего этого на экране.
  2. Произведите файл, содержащий число. Файл находится в некотором формате изображения как GIF, JPEG или некоторый печатаемый формат как PostScript. Сделать help set terminal видеть, как установить терминал. Я предположу, что Вы хотите PostScript, но можно выбрать формат позже:

    gnuplot> постскриптум термина набора

    gnuplot> излагают "plot.ps"

    gnuplot> переграфик

    gnuplot> установленные сроки X11

У Вас должна быть печатаемая версия PostScript Вашего графика в файле "plot.ps" Для получения изображения GIF, Вы сказали бы set term gif, set out "something.gif", и replot. Иногда, выходной файл будет нулевыми байтами, пока Вы не сделаете set term x11 (или безотносительно).

1
22.02.2013, 19:32
3 ответа

Является самым легким при использовании zsh благодаря его спецификаторам шарика: [-1] сохранить последнее соответствие и n использовать числовую сортировку так, чтобы R9 прибывает прежде R10. Можно также использовать в своих интересах <-> шаблон шарика для соответствия числам.

last_release=(releases/R<->(n[-1]))
if (($#last_release == 0)); then
  echo 1>&2 "Fatal error: no release available"
  exit 2
fi

Только с портативными инструментами самый легкий метод должен разгрузить числовую сортировку к sort. Если у Вас только есть “ручные” имена файлов в releases каталог (символы ASCII только, никакие управляющие символы, никакой пробел), фильтруя вывод ls удобный способ генерировать список имен файлов.

set_last_release () {
  set -- $(ls releases | sed -n 's/^R\([0-9][0-9]*\)//p' | sort -rn)
  if [ $# -eq 0 ]; then
    echo 1>&2 "Fatal error: no release available"
    exit 2
  fi
  last_release=releases/R$1
}

Если Вы используете продвижение, обнуляет в Ваших номерах выпуска, можно полагаться на встроенную сортировку оболочки. Обратите внимание, что нет никакого портативного способа соответствовать только именам файлов, состоящим из R сопровождаемый одним или несколькими цифра; в ksh можно использовать releases/R+([0-9]), и можно также использовать это в ударе, если Вы помещаете shopt -s extglob в начале Вашего сценария (это должно быть в действительности и когда функция анализируется и когда это выполняется).

set_last_release () {
  set -- releases/R[0-9]*
  if [ "$1" = 'releases/R[0-9]*' ]; then
    echo 1>&2 "Fatal error: no release available"
    exit 2
  fi
  eval last_release=\$$#
}
2
27.01.2020, 23:29

как насчет этого:

DIRECTORY=$(ls .../releases | tail -n 1)

Это работает, пока Ваши имена каталогов могут быть отсортированы как строки. например, '2' был бы после '12', если Вы не называете '2' на самом деле '02'

1
27.01.2020, 23:29
  • 1
    Иначе, Если Ваши каталоги не могут быть отсортированы как строки, и Вы не можете изменить их имена, можно также сделать это 'поскольку я в {1.. 1000}; сделайте если [!-d.../releases/R$ {я}]; затем повреждение; fi;готово; позвольте i= $ {я}-1' в $ конца {я} - количество последнего каталога –  replay 22.02.2013, 13:03

Просто попробуйте это:

for dir in releases/R*[0-9]/; do
   echo "$dir"
done
0
27.01.2020, 23:29

Теги

Похожие вопросы