У меня есть файл со списком имен файлов, который я пытаюсь использовать в качестве входных данных в определенном инструменте загрузки файлов (sratools), но в моем скрипте возникла проблема.
#!/bin/bash
input="<path_to_directory>/SRR_Acc_List.txt"
while IFS= read -r line
do
"<path_to_tool>/fastq-dump -O <desired_output_directory/ $line"
echo "Downloading $line file"
done <"$input"
Команда работоспособна на одном входе, и эхо правильное, но часть команды выдает ошибку
line 6: ./fastq-dump -O ../../DATA_fastQ/ SRR1975008: No such file or directory
Буду признателен, если укажете, где я ошибся!
решение1
Эта линия
"<path_to_tool>/fastq-dump -O <desired_output_directory/ $line"
должно быть
"<path_to_tool>/fastq-dump" -O "<desired_output_directory/" "$line"
# unquoted spaces ^ ^ they separate words ^
Итак, есть четыре слова. Ваша исходная строка была целиком процитирована и интерпретирована как одно слово, имя команды. Поскольку ваше "имя команды" начинается с ./
, это должен быть файл или каталог. Но файла или каталога с буквальным именем не существует ./fastq-dump -O ../../DATA_fastQ/ SRR1975008
, отсюда и ошибка.
Я процитировал <path_to_tool>/fastq-dump
и <desired_output_directory/
на всякий случай, если фактические значения содержат пробелы и/или что-то подобное. Из сообщения об ошибке я могу сказать, что они этого не делают, но в целом они могут.
Очень хорошо, что вы цитируете (например, здесь: done <"$input"
). Проблема была в том, что вы использовали одну пару кавычек, когда некоторые строки приходилось обрабатывать отдельно.