以#$ 开头的 bash 脚本行是什么意思?

mla*_*teb 13 command-line bash scripts

我在 GitHub 上找到了这个bash脚本,我想将其用于我自己的工作。我的问题如下:第 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!"
Run Code Online (Sandbox Code Playgroud)

des*_*ert 19

以 开头的行#$是选项qsub,用于向 SGE 集群提交作业的命令,本自述文件中解释的调度系统:

使用 BIMSB(即将称为 MAX)集群环境类似于使用 unix/linux 环境提交作业(例如运行脚本或其他软件)。不同之处在于您需要事先指定所需的资源。集群由组织队列和资源的 SGE(Sun Grid Engine Software)控制。当有限的计算资源被许多人共享时,这种调度系统是必要的。而且,如果您正在为多个样本运行对齐并希望将这些任务(作业)分布在多台机器或 CPU 上,或者运行需要在多个 CPU 上运行很长时间的统计模拟时,这将非常有用。对于这些情况以及更多类似情况,

SGE 将进行“作业调度”。这意味着您可以提交所有作业,SGE 会将它们排入队列并在您请求的资源可用时运行它们。SGE 还将实现“负载平衡”,其中将分配作业,以便特定节点不会过载。此外,SGE 将允许您进行“作业监控和会计”,这在您想检查您的作业是否正在运行时非常有用,如果它失败,它将帮助您了解出了什么问题。

qsub命令的语法在其手册页中进行了解释,您的脚本使用以下选项:

  • -l h_rt=<hh:mm:ss> – 指定最长运行时间(小时、分钟和秒)
  • -V – 将所有环境变量传递给作业
  • -N <jobname>– 指定作业的名称。当您使用qstat, 检查您的作业状态时,您将看到这一点。
  • -j y[es]|n[o] – 指定是否将作业的标准错误流合并到标准输出流中

正如How to submit a job using qsub解释的那样,可以qsub直接在脚本中以#$. 这是qsub在命令行上使用命令传递它们的替代方法。