以#$开头的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!"

Answers:


19

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

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

SGE将执行“作业计划”。这意味着您可以提交所有作业,SGE会将它们排队,并在您请求的资源可用时运行它们。SGE还将实现“负载平衡”,在该负载下将分配作业,以使特定节点不会过载。此外,SGE允许您执行“作业监视和记帐”,这在您要检查作业是否正在运行时很有用,如果失败,它将帮助您了解问题所在。

qsub命令的语法在其联机帮助页中进行了说明,您的脚本使用以下选项:

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

正如如何使用qsub提交作业所解释的那样,可以qsub直接在脚本中以开头的行中设置选项#$。这是qsub在命令行中通过命令传递它们的替代方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.