2016-06-07 121 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