如何在Bash中向Python脚本传递两个变量?问题及解决方案
问题:SLURM数组任务中无法向Python脚本传递文件名
尝试将SLURM_ARRAY_TASK_ID(数组索引)和文件名传递给Python脚本,但文件名始终传递失败。原Bash脚本如下:
#!/bin/bash #SBATCH --job-name=test #SBATCH --output=Test.txt #SBATCH --array=0-1 for Folder in ~/users/**/**/T*A* do File= basename ${Folder} python test.py ${SLURM_ARRAY_TASK_ID} ${File} done
解决方案
修正后的脚本如下,通过正确的命令替换获取文件名,并为变量添加引号避免特殊字符问题:
#!/bin/bash #SBATCH --job-name=test #SBATCH --output=Test.txt #SBATCH --array=0-1 for Folder in ~/users/**/**/T*A* do File=$(basename "${Folder}") python test.py "${SLURM_ARRAY_TASK_ID}" "${File}" done
关键修正点
- 修复命令替换语法:原脚本中
File= basename ${Folder}未正确使用命令替换,需用$()包裹basename命令,才能将命令输出赋值给File变量;同时给${Folder}添加双引号,避免路径包含空格、特殊字符时被Shell错误解析。 - 变量引用添加引号:调用Python脚本时,给
${SLURM_ARRAY_TASK_ID}和${File}都加上双引号,确保变量内容(尤其是文件名)包含空格或特殊字符时,能作为完整参数传递给Python脚本。
内容的提问来源于stack exchange,提问作者nkehoe
相关产品推荐
相关产品推荐

