You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本调用bwa mem无法识别参考索引文件问题求助

问题解决:BWA索引找不到 + Bash脚本换行符错误

核心问题诊断

从set -x输出的日志可明确两个关键错误:

  1. line 2: set: -: invalid option + $'\r': command not found:这是Windows风格的CRLF换行符导致的——用Sublime编写脚本时默认可能使用了Windows换行格式,而Ubuntu系统要求Bash脚本使用Unix风格的LF换行符。
  2. 脚本第一行#!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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:57:50