![以 #$ 开头的 bash 脚本行是什么意思?](https://linux22.com/image/900352/%E4%BB%A5%20%23%24%20%E5%BC%80%E5%A4%B4%E7%9A%84%20bash%20%E8%84%9A%E6%9C%AC%E8%A1%8C%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%EF%BC%9F.png)
我发现这个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