总结一下:
我正在使用 bash shell,版本:4.2.46(2)-release
我想向 slurm 作业调度程序提交一个批处理作业脚本,在该脚本中,我使用扩展通配符,该扩展通配符在我尝试使用的扩展通配符命令的单独行上使用 shopt -s extglob 打开。
我想运行这些命令:
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 中包含的文件是我要删除的目录和文件的混合。
我很好奇是否有人以前遇到过这个问题/知道解决方法?或者可以提供替代解决方案?