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

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

我发现这个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!"

答案1

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

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

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

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

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

作为如何使用 qsub 提交作业解释道,可以qsub直接在以 开头的脚本行中设置选项。这是使用命令行上的命令#$传递选项的替代方法。qsub

相关内容