我是Bash脚本新手。我的脚本的作用是访问提供的路径,然后对该路径中提供的数据应用一些软件(RTG - 实时基因组学)命令。但是,当我尝试从CLI执行bash时,它会给我以下错误
错误:输入文件路径无效
我在脚本中提供的路径是准确的。也就是说,在原始目录中,程序' RTG'我居住了相应的文件夹,如/data/reads/NA19240
,并将*_1.fastq
和*_2.fastq
个文件放在NA19240
内。
这是脚本:
#!/bin/bash
for left_fastq in /data/reads/NA19240/*_1.fastq; do
right_fastq=${left_fastq/_1.fastq/_2.fastq}
lane_id=$(basename ${left_fastq/_1.fastq})
rtg format -f fastq -q sanger -o ${lane_id} -l ${left_fastq} -r ${right_fastq} --sam-rg "@RG\tID:${lane_id}\tSM:NA19240\tPL:ILLUMINA"
done
我尝试了很多解决方法,但仍然无法绕过此错误。如果你们能帮助我解决这个问题,我将非常感激。谢谢
在bash脚本中添加set -aux
以进行调试后,我现在得到以下输出
adnan@adnan-VirtualBox[Linux] ./format.sh
+ for left_fastq in '/data/reads/NA19240/*_1.fastq'
+ right_fastq='/data/reads/NA19240/*_2.fastq'
++ basename '/data/reads/NA19240/*'
+ lane_id='*'
+ ./rtg format -f fastq -q sanger -o '*' -l '/data/reads/NA19240/*_1.fastq' -r '/data/reads/NA19240/*_2.fastq' --sam-rg '@RG\tID:*\tSM:NA19240\tPL:ILLUMINA'
Error: File not found: "/data/reads/NA19240/*_1.fastq"
Error: File not found: "/data/reads/NA19240/*_2.fastq"
Error: There were 2 invalid input file paths
答案 0 :(得分:0)
您需要在脚本中设置nullglob
option,如下所示:
shopt -s nullglob
默认情况下,非匹配的globs会扩展为自身。通过设置set -aux
得到的输出表明文件glob /data/reads/NA19240/*_1.fastq
正在按字面解释。唯一的方法是,如果找不到文件,并且nullglob
被禁用。
答案 1 :(得分:0)
在原始目录中,程序' RTG'居住,我有 相应地创建文件夹,如
/data/reads/NA19240
并放置两者*_1.fastq
内的*_2.fastq
和NA19240
个文件。
所以你说,你的数据文件夹在原始目录(无论可能是什么),但是在脚本中你错误地将它们指定为根目录 (由领先的/
)
由于您在原始目录中启动脚本,只需删除前导/
并使用相对路径:
for left_fastq in data/reads/NA19240/*_1.fastq