我想让这个Bash脚本:
- 读取文件内容并将其分配给
URLS
- 提示用户输入下载内容的路径,并将其分配给
PATH
- 遍历URLS
- 使用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
我的直觉是,我没有正确地将$PATH
与wget
一起使用,因为如果我注释掉--directory-prefix $PATH
,脚本将正确运行。
提前感谢您的协助。
PATH
是一个保留含义的环境变量:它用于查找要执行的二进制文件的位置。
使用非保留名称以避免覆盖,例如path
;POSIX规范中明确给出了这种约定,以避免覆盖对系统有意义的环境变量。报价加重点:
IEEE Std 1003.1-2001外壳和实用程序卷中实用程序使用的环境变量名称仅由大写字母、数字和可移植字符集中定义的字符中的"_"(下划线)组成,并且不以数字开头。实现可能允许使用其他字符;应用程序应允许出现此类名称。大写字母和小写字母应保持其独特的身份,不得折叠在一起包含小写字母的环境变量名称的名称空间是为应用程序保留的。应用程序可以使用此名称空间中的名称定义任何环境变量,而无需修改标准实用程序的行为
。。。这甚至与没有明确CCD_ 8与环境相关的shell变量有关,因为对具有与环境变量(如PATH
)重叠的名称的shell变量的赋值隐式地覆盖了后者。
因此,您的代码可能看起来像:
#!/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读取文件的最佳实践
- DontRadLinesWithFor,明确描述了关于使用
for
迭代要解释为面向行数据的内容的注意事项
另外,请注意,zsh不是一个符合POSIX的shell;它偏离标准精神和意图的一个方面是,它也对path
进行了特殊处理,如果需要zsh兼容性,则path
作为PATH
的替代品是不安全的。