Bash脚本调用bwa mem无法识别参考索引文件问题求助
问题解决:BWA索引找不到 + Bash脚本换行符错误
核心问题诊断
从set -x输出的日志可明确两个关键错误:
line 2: set: -: invalid option+$'\r': command not found:这是Windows风格的CRLF换行符导致的——用Sublime编写脚本时默认可能使用了Windows换行格式,而Ubuntu系统要求Bash脚本使用Unix风格的LF换行符。- 脚本第一行
#!bin/bash格式错误:正确的Shebang应该是#!/bin/bash(缺少开头的/),否则系统无法正确定位Bash解释器。
这两个问题叠加,导致脚本执行异常,间接引发BWA无法正确识别参考序列路径的问题。
分步修复方案
1. 修复脚本换行符格式
方法1:用dos2unix转换
在终端执行:dos2unix treat_align.sh若未安装dos2unix,先执行:
sudo apt install dos2unix方法2:在Sublime中直接设置
打开脚本后,点击顶部菜单:View -> Line Endings -> Unix,再保存脚本。
2. 修正Shebang行
将脚本第一行的#!bin/bash修改为:
#!/bin/bash
3. 脚本健壮性优化
为避免后续其他问题,建议补充以下调整:
- 提前创建输出目录,防止因目录不存在报错:
mkdir -p process - 给所有变量添加双引号,避免文件名含空格时出现异常:
bwa mem -t 32 "$ref" "$inputfilename" > "process/${filename}.sam"
修复后的完整脚本:
#!/bin/bash inputfilename=$1 ref=$2 # 创建输出目录 mkdir -p process # 提取文件名 fastqname=$(basename "$inputfilename") filename=${fastqname%%.*} # 执行序列比对 bwa mem -t 32 "$ref" "$inputfilename" > "process/${filename}.sam"
验证修复
重新执行脚本:
bash treat_align.sh ref/chr21.fa raw/S200021517_L01_10.fq.gz
此时BWA应能正常识别索引文件并完成序列比对。
内容的提问来源于stack exchange,提问作者Rotomegax
相关产品推荐
相关产品推荐

