SLURM bash脚本跨文件夹复制文件失败,请求排查问题
问题排查:SLURM脚本跨文件夹复制失效
问题场景
需要循环处理0-4号独立文件夹,处理第i个文件夹(i>0)时,从第i-1个文件夹复制file1到当前文件夹并命名为file2,但SLURM脚本中的复制操作始终失败,原脚本如下:
#!/usr/bin/bash #SBATCH --time=120:00:00 #SBATCH --partition=... #SBATCH --ntasks=... #SBATCH --job-name ... #SBATCH --nodes=... #SBATCH --gpus-per-node=... #SBATCH --cpus-per-gpu=... #SBATCH --account=... #SBATCH --qos=... #SBATCH --output=slurm-out #SBATCH --error=slurm_error cd $SLURM_SUBMIT_DIR module load gcc/9.3.0 for((i=0;i<=4;i++)) do cd $i if [$i -gt 0] then j=$(($i - 1)) cp $j/file1 ./file2 fi csh README > log cd ../ done
错误原因及修复
- 条件判断语法错误:
[$i -gt 0]缺少必要空格,bash中[是test命令的别名,前后必须加空格,否则会被解析为无效字符串,导致条件分支不执行。修复为:[ $i -gt 0 ] - 相对路径错误:进入
$i文件夹后,$j/file1是相对于当前$i目录的路径,而$j文件夹在上级目录,所以需要修正路径为../$j/file1,否则会在当前$i目录下寻找不存在的$j子文件夹。
修复后的核心脚本片段
for((i=0;i<=4;i++)) do cd $i if [ $i -gt 0 ] then j=$(($i - 1)) cp ../$j/file1 ./file2 fi csh README > log cd ../ done
内容的提问来源于stack exchange,提问作者amirbakh
相关产品推荐
相关产品推荐

