Singularity/Docker中Bash脚本无法解析参数问题求助
解决Singularity中Metadbgwas脚本无法接收参数/显示帮助的问题
问题根源
你当前的ENTRYPOINT写法["/bin/bash", "/Metadbgwas/metadbgwas.sh"]存在参数传递逻辑问题:当用数组形式指定ENTRYPOINT时,Singularity传入的后续参数会被当作/bin/bash的参数,而不是传递给metadbgwas.sh脚本,导致脚本无法解析参数,无参数时也触发不了帮助函数。
解决方案
方案1:直接以脚本作为ENTRYPOINT(推荐)
如果metadbgwas.sh开头带有#!/bin/bash的shebang(绝大多数bash脚本都会有),可以直接将脚本设为ENTRYPOINT,无需通过bash包裹:
修改Dockerfile中的ENTRYPOINT行:
ENTRYPOINT ["/Metadbgwas/metadbgwas.sh"]
方案2:通过bash正确传递参数
如果必须保留bash包裹的形式,需要用-c参数并通过$@传递所有后续参数:
修改Dockerfile中的ENTRYPOINT行:
ENTRYPOINT ["/bin/bash", "-c", "/Metadbgwas/metadbgwas.sh \"$@\"", "--"]
这里的--用来分隔bash自身的参数和要传递给脚本的参数,\"$@\"会将所有传入的参数原封不动传递给脚本。
验证步骤
- 重新构建镜像:
docker build -t 007ptar007/metadbgwas:latest .
- 拉取Singularity镜像:
singularity pull docker://007ptar007/metadbgwas:latest
- 无参数测试(应显示帮助):
singularity run metadbgwas_latest.sif
- 带参数测试(应正常启动Lighter流程):
singularity run metadbgwas_latest.sif --files ./input --output ./output --K 17 6000000 --strains ./strains
额外检查
- 确认
install_docker.sh中已经给metadbgwas.sh添加了可执行权限(你的脚本里已经执行了chmod +x metadbgwas.sh,这步没问题) - 确保脚本的帮助函数逻辑正确:无参数时会触发帮助输出(可在本地直接运行
bash /Metadbgwas/metadbgwas.sh验证)
内容的提问来源于stack exchange,提问作者Yama
相关产品推荐
相关产品推荐

