linux - 在使 bash 脚本工作时遇到问题

标签 linux bash

我是 Bash 脚本的新手。我的脚本预期的作用是访问提供的路径,然后对该路径中提供的数据应用一些软件(RTG - 实时基因组学)命令。但是,当我尝试从 CLI 执行 bash 时,出现以下错误

ERROR:There were invalid input file paths

我在脚本中提供的路径是准确的。也就是说,在程序“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

最佳答案

您需要设置 nullglob option在脚本中,像这样:

shopt -s nullglob

默认情况下,不匹配的 glob 会扩展为自身。通过设置 set -aux 获得的输出表明文件 glob /data/reads/NA19240/*_1.fastq 正在逐字解释。发生这种情况的唯一方法是没有找到文件,并且 nullglob 被禁用。

关于linux - 在使 bash 脚本工作时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34448767/

相关文章:

c++ - Linux - 从不同位置编译 C++ 项目文件

linux - 尝试使用 putty 在我的 Linux 专用服务器上运行 optipng 和 jpegoptim

c++ - Linux上适用于C++的任何更智能的编译系统

linux - 定期检查文件夹是否已在目录中创建

bash - Jenkins 项目中 ${my_variable} 和 $my_variable 的区别

Linux:在 shell 脚本中导出环境变量,使其在任何服务器上都灵活

linux - 一行设置环境变量并执行命令,在sh和bash中得到不同的结果

java - 无法在 Linux 中运行简单的 bash 命令,权限被拒绝

bash - 如何迭代 Bash 中变量定义的一系列数字?

bash - Bash 脚本上的 Cron Pipe zcat 不起作用