有没有人在HPC上用SBATCH设置成功地在bash中使用shopt -s extglob(扩展glob)?

问题描述 投票:0回答:1

总结一下。

我使用的是bash shell,版本为:4.2.46(2)-release。4.2.46(2)-release。

我想提交一个批处理作业脚本到 slurm 作业调度器,在脚本中我使用了扩展的 globbing,在我试图使用的扩展 globbing 命令之外的另一行使用 shopt -s extglob 打开了扩展 globbing。

我想运行这些命令。

echo !(wmparc.nii.gz)
#  for sid in $SubIdStr; do

#     cd $sid
#     rm -r rfMRI T2w
#     cd T1w
#     rm -r !(wmparc.nii.gz)
#     cd ..
#     cd MNINonLinear/
#     rm -r !(wmparc.nii.gz|T1w_restore_brain.nii.gz|Results)
#     cd ..
#     cd ..

#  done

我试过在这些命令之前使用 shopt -s extglob,并在它们之间加上一个新行,例如: 。

shopt -s extglob

echo !(wmparc.nii.gz)

这样做是行不通的,而且在写完 shopt extglob 后,也没有显示扩展的 globbing 是开启还是关闭,并输出到我的日志文件中。

我发现 shopt -s extglob 唯一有效的地方是在开始的时候,比如说:"你可以用这个方法。

#!/bin/bash
shopt -s extglob

这是一个问题,然而,因为我的SBATCH设置没有被解释,例如: :

#SBATCH --mail-type=END                         
#SBATCH --mail-user=
#SBATCH --partition=imgcomputeq
#SBATCH --qos=img
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --mem=5g
#SBATCH --time=50:00:00

这是手册中对sbatch的描述。

sbatch向Slurm提交一个批处理脚本. 批处理脚本可以通过命令行上的文件名提供给 sbatch,或者如果没有指定文件名,sbatch 将从标准输入中读取脚本。批处理脚本可以在脚本中任何可执行的命令前包含以 "#SBATCH "开头的选项,一旦脚本中到达第一行非注释非空格行,sbatch将停止处理进一步的#SBATCH指令。

我试图删除所有的目录,但在扩展的glob中包含的文件除外,我想删除的目录和文件是混合的。

我很好奇是否有人遇到过这个问题?或者可以提供一个替代的解决方案?

linux bash hpc slurm sbatch
1个回答
0
投票

工作方法是更多的POSIX(兼容),因此,可以说,更好。

for sid in $storeIdStr; do

  rm -r $sid/rfMRI $sid/T2w
  find $sid/MNINonLinear/ -maxdepth 1 -mindepth 1 ! -name 'wmparc.nii.gz' ! -name 'T1w_restore_brain.nii.gz' ! -name 'Results' -exec rm -rf {} \;
  find $sid/T2w/ -maxdepth 1 -mindepth 1 ! -name 'T2w_acpc.nii.gz' -exec rm -rf {} \;
  find $sid/T1w/ -maxdepth 1 -mindepth 1 ! -name 'wmparc.nii.gz' -exec rm -rf {} \;

done

我仍然有兴趣听到任何人的回答 关于为什么shopt -s extglob必须放在脚本的开头 或者其他任何人的经验,当与SBATCH设置结合使用?

© www.soinside.com 2019 - 2024. All rights reserved.