我有一个包含文件名列表的文件,我正尝试将其用作特定文件下载工具 (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"
。问题是您使用了一对引号,而某些字符串必须单独处理。