【问题标题】:Has anyone successfully used shopt -s extglob (extended globbing) in bash with SBATCH settings on a HPC?有没有人在 HPC 上通过 SBATCH 设置成功地在 bash 中使用 shopt -s extglob(扩展通配符)?
【发布时间】:2020-04-29 20:49:52
【问题描述】:

总结一下:

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

我想向 slurm 作业调度程序提交一个批处理作业脚本,在该脚本中,我使用扩展 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】:

    更 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 设置结合使用时的经验?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多