另外,以下是我收到的 .bat 文件的一部分。我以为该文件格式是针对 Windows 脚本的,但下面是 Unix shell 脚本,不是吗?那么这和 .sh 文件有什么区别呢?
#PBS -l mem=900mb,walltime=25000:00:00,cput=25000:00:00,nodes=1:ppn=1
cd $PBS_O_WORKDIR
./sample_file.x > tmp
答案1
这是一个 shell 脚本文件(您称之为“sh 文件”)。但是,它还包含以下指令:PBS 调度程序。这是一个经常出现在高性能集群中的系统,其中多个用户需要能够提交作业,然后将作业放入排队系统并在资源可用时启动。
一般来说,shell 脚本中以 a 开头的任何行#
都是注释,会被 shell 脚本解释器(例如 bash)忽略。这最常用于注释代码,但一个著名的例外是舍邦线(例如#!/bin/bash
)会被 shell 解释器忽略(以 开头#
),但会被内核读取以决定应该向哪个解释器提供脚本。
PBS 使用类似的方法:#PBS
在为 shell 脚本中描述的作业设置参数时,PBS 会读取注释。所以,这一行:
#PBS -l mem=900mb,walltime=25000:00:00,cput=25000:00:00,nodes=1:ppn=1
告诉 PBS 在单个节点上使用 900M 内存运行此程序,无论各种选项可能意味着什么。
最后,这cd $PBS_DIRECTORY
是一个普通的 shell 命令。$PBS_DIRECTORY
是一个变量,大概已被设置为指向应执行工作的目录。因此,脚本的第一步是cd
进入该目录,移动到其中,然后运行sample_file.x
位于该目录中的脚本。
有关更多详细信息,请咨询您正在使用的 PBS 集群的管理员。
答案2
它看起来确实像一个 shell 脚本。如果是这样,# 就是注释的开头。在该脚本中,$用于变量替换,即$PBS_O_WORKDIR被环境变量PBS_O_WORKDIR的值替换。-l
不是命令。
我不知道为什么 shell 脚本被命名为 Something.bat,但你可以随意命名它。扩展名没有任何意义。