Что означает строки сценария bash, начинающиеся с # $?

13

Я нашел этот bashскрипт на GitHub, который хочу использовать для своей работы. У меня следующий вопрос: что означают строки со 2 по 5? Это просто комментарии или они служат какой-то цели?

#!/bin/bash
#$ -l h_rt=72:00:00
#$ -V
#$ -N index_calc
#$ -j y

source ~/modules.sh

cd $1

l_file=`find . -name 'L*stack' -type f`
for l in $l_file; do
    echo "Running on file:"
    echo $l
      extract=${l:0:45}
    name=${extract}_index.tif
    echo "Name of index stack:"
    echo $name
    echo "Executing code..."
    ~/Documents/misc/spectral/transforms.py \
    -v $l $name evi ndvi nbr ndmi 

done

echo "Done!"
mlateb
источник

Ответы:

19

Строки, начинающиеся с, #$представляют собой опции для qsubкоманды, используемой для отправки задания в кластер SGE, системы планирования, описанной в этом файле readme :

Использование кластерной среды BIMSB (которая вскоре будет называться MAX) аналогично использованию сред Unix / Linux для отправки ваших заданий (например, запуск сценариев или другого программного обеспечения). Разница в том, что вам нужно заранее указать необходимые ресурсы. Кластер управляется SGE (Sun Grid Engine Software), который организует очереди и ресурсы. Такая система планирования необходима, когда ограниченные вычислительные ресурсы совместно используются многими. И это было бы полезно, если вы выполняете выравнивания для нескольких выборок и хотите распределить эти задачи (задания) по нескольким машинам или процессорам, или при выполнении статистического моделирования, которое должно выполняться на нескольких процессорах в течение длительного времени. Для этих случаев и многих других,

SGE выполнит «планирование работы». Это означает, что вы можете отправлять все свои задания, а SGE ставит их в очередь и запускает, когда запрашиваемые ресурсы становятся доступными. SGE также обеспечит «балансировку нагрузки», при которой задания будут распределены, чтобы не перегружать определенные узлы. Кроме того, SGE позволит вам выполнять «мониторинг и учет заданий», что будет полезно, если вы хотите проверить, выполняется ли ваше задание, и если оно не удалось, это поможет вам понять, что пошло не так.

Синтаксис qsubкоманды описан на ее man-странице , ваш скрипт использует следующие параметры:

  • -l h_rt=<hh:mm:ss> - укажите максимальное время выполнения (часы, минуты и секунды)
  • -V - передать все переменные окружения в работу
  • -N <jobname>- укажите название работы. Это вы увидите, когда будете использовать qstat, чтобы проверить статус вашей работы.
  • -j y[es]|n[o] - указывает, будет ли стандартный поток ошибок задания объединен со стандартным потоком вывода

Как объясняется, как отправить работу с помощью qsub, можно задать qsubпараметры непосредственно в скрипте в строках, которые начинаются с #$. Это альтернатива передаче их с помощью qsubкоманды в командной строке.

Десерт
источник