Was bedeuten Bash-Skriptzeilen, die mit # $ beginnen?

13

Ich habe dieses bashSkript auf GitHub gefunden, das ich für meine eigene Arbeit verwenden möchte. Meine Frage lautet wie folgt: Was bedeuten die Zeilen 2 bis 5? Sind sie nur Kommentare oder dienen sie irgendeinem Zweck?

#!/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
quelle

Antworten:

19

Die Zeilen, die mit beginnen, #$sind Optionen für qsubeinen Befehl zum Senden eines Jobs an den SGE-Cluster, ein Planungssystem, das in dieser Readme-Datei erläutert wird :

Die Verwendung der BIMSB-Clusterumgebung (bald MAX genannt) ähnelt der Verwendung von Unix- / Linux-Umgebungen für Ihre Auftragsübermittlung (z. B. Ausführen Ihrer Skripts oder anderer Software). Der Unterschied besteht darin, dass Sie die erforderlichen Ressourcen im Voraus angeben müssen. Der Cluster wird von einer SGE (Sun Grid Engine Software) gesteuert, die die Warteschlangen und Ressourcen organisiert. Diese Art von Planungssystem ist erforderlich, wenn begrenzte Rechenressourcen von vielen gemeinsam genutzt werden. Dies ist hilfreich, wenn Sie Alignments für mehrere Beispiele ausführen und diese Aufgaben (Jobs) auf mehrere Computer oder CPUs verteilen möchten, oder wenn Sie statistische Simulationen ausführen, die über einen längeren Zeitraum auf mehreren CPUs ausgeführt werden müssen. Für diese Fälle und viele mehr gleichermaßen,

SGE wird die "Jobplanung" durchführen. Das heißt, Sie können alle Ihre Aufträge übermitteln, und SGE stellt sie in die Warteschlange und führt sie aus, sobald die von Ihnen angeforderten Ressourcen verfügbar werden. SGE erzielt auch einen "Lastausgleich", bei dem die Jobs verteilt werden, damit bestimmte Knoten nicht überlastet werden. Darüber hinaus können Sie mit SGE "Jobüberwachung und -abrechnung" durchführen. Dies ist hilfreich, wenn Sie überprüfen möchten, ob Ihr Job ausgeführt wird, und wenn er fehlgeschlagen ist, können Sie besser nachvollziehen, was schief gelaufen ist.

Die Syntax des qsubBefehls wird auf der Manpage erklärt . Ihr Skript verwendet die folgenden Optionen:

  • -l h_rt=<hh:mm:ss> - Geben Sie die maximale Laufzeit an (Stunden, Minuten und Sekunden)
  • -V - Alle Umgebungsvariablen an den Job übergeben
  • -N <jobname>- Geben Sie den Namen des Auftrags an. Dies sehen Sie, wenn Sie den qstatStatus Ihrer Jobs überprüfen.
  • -j y[es]|n[o] - Gibt an, ob der Standardfehlerstrom des Jobs mit dem Standardausgabestrom zusammengeführt wird

Wie Wie man einen Job mit qsub einreichen erklärt man die einstellen kann qsubOptionen direkt im Skript in Zeilen , die mit beginnen #$. Dies ist eine Alternative zur Übergabe mit dem qsubBefehl in der Befehlszeile.

Dessert
quelle