2016-06-07 160 views
-1

我想這個bash腳本到:

  • 讀取和文件的內容分配給URLS
  • 提示用戶輸入一個路徑來下載內容,將其分配給PATH
  • 通過URL遍歷
  • 使用wget將內容下載到PATH。

這裏是我到目前爲止有:

#!/bin/bash 
URLS=$(<urls.txt) 

read -e -p "Please enter the path of the directory you'd like to save your files to: " PATH 

for link in $URLS 
do 
    wget --background --tries=45 $URLS --directory-prefix $PATH 
done 
exit 0 

我的直覺是,我沒有使用正確$PATHwget,因爲該腳本將正常運行,如果我註釋掉--directory-prefix $PATH

在此先感謝您的幫助。

+0

它沒有註釋掉'--directory-prefix $ PATH',它有所作爲(用於'wget:command not found'的目的),但註釋掉'read PATH'。 –

回答

1

PATH是一個具有保留含義的環境變量:它用於查找要執行的二進制文件的位置。

使用非保留名稱以避免覆蓋它,例如path;這個約定是explicitly given in the POSIX specification,以避免覆蓋環境變量對系統有意義。重點引用添加:通過在IEEE標準1003.1-2001的殼和實用程序體積公用事業使用

環境變量名包括純粹大寫字母,數字和「_」(下劃線)從所定義的字符在便攜式字符集中,不要以數字開頭。其他角色可能會被執行所允許;應用程序應該容忍這些名稱的存在。大寫和小寫字母應保留其獨特的身份,不得摺疊在一起。 包含小寫字母的環境變量名稱的名稱空間是爲應用程序保留的。應用程序可以使用此名稱空間中的名稱定義任何環境變量,而不修改標準實用程序的行爲。

...這是相關連到殼未明確export編到環境變量,因爲分配到與該使用環境變量(如PATH)重疊名稱殼變量隱含地覆蓋了後者。


因此,你的代碼可能看起來像:

#!/bin/bash 

read -e -p "Please enter the path of the directory you'd like to save your files to: " path 

while IFS= read -r link; do 
    wget --background --tries=45 --directory-prefix "$path" "$link" 
done <urls.txt 

參見:

  • BashFAQ #001,描述圍繞閱讀從bash的文件的最佳實踐。
  • DontReadLinesWithFor,明確描述使用for圍繞什麼打算被解釋爲面向行的數據的注意事項。
+0

我們衷心感謝代碼修訂和全面的解釋。我接受的答案是正確的。 – marshki