特定のファイルダウンロードツール(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 ^
つまり、4 つの単語があります。元の行は全体として引用され、1 つの単語、つまりコマンド名として解釈されました。「コマンド名」は で始まっているので./
、ファイルまたはディレクトリである必要があります。しかし、リテラル名 を持つファイルまたはディレクトリは存在しない./fastq-dump -O ../../DATA_fastQ/ SRR1975008
ため、エラーが発生します。
<path_to_tool>/fastq-dump
念のため、<desired_output_directory/
実際の値にはスペースなどが含まれていることを前提として引用しました。エラー メッセージからは含まれていないことがわかりますが、一般的には含まれている可能性があります。
引用符を使用するのはとても良いことです (例: done <"$input"
)。問題は、特定の文字列を個別に処理する必要がある場所で 1 組の引用符を使用したことです。