Linux Bash 腳本對檔案名稱清單執行終端命令

Linux Bash 腳本對檔案名稱清單執行終端命令

我有一個包含文件名列表的文件,我嘗試將其用作特定文件下載工具(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":)。問題是您使用了一對引號,其中某些字串必須單獨處理。

相關內容