***已解决***无法触摸bash脚本中具有var名称的文件进行循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了***已解决***无法触摸bash脚本中具有var名称的文件进行循环相关的知识,希望对你有一定的参考价值。

我正在为PiHole编辑脚本,以将adblock列表格式转换为dns格式,以供PiHole使用。想法是滚动到一个lists.list文件,该文件包含指向不同列表的链接,对该文件的每个链接进行卷曲,并为每个名为$ link.list的链接创建一个包含所有dns名称的文件。

*问题是:*我收到消息“触摸:无法触摸'https://easylist-downloads.adblockplus.org/easylistgermany.txt.list':没有这样的文件或目录”

我试图查看是否存在某些权限问题,所以我将其带到了home / user文件夹中。如果我这样做

curl --silent $source >> ads.txt 

touch ads.txt

有效

这是我写的内容:

for sources in `cat lists.list`; do
    echo $source
    touch "$source".list
    echo `curl --silent $source` > $source.list
    echo -e "	`wc -l $source.list | cut -d " " -f 1` lines downloaded"
done

我得到

https://easylist-downloads.adblockplus.org/easylist.txt
touch: cannot touch 'https://easylist-downloads.adblockplus.org/easylist.txt.list': No such file or directory

有什么建议吗?谢谢您的时间!

答案

这是因为您使用完整的URL作为文件名,但是文件名中不能包含斜线。您可以将文件命名为URL的最后一位吗?然后这应该工作:

#!/bin/bash

for source in `cat lists.list`; do
    echo $source
    filename=$(sed -E 's@.+/@@' <<< $source).list  # <-- remove everything up to and including the last slash
    curl --silent "$source" -o "$filename"
    echo -e "	`wc -l $filename | cut -d " " -f 1` lines downloaded"
done

以上是关于***已解决***无法触摸bash脚本中具有var名称的文件进行循环的主要内容,如果未能解决你的问题,请参考以下文章

在 bash 脚本中运行 php:错误“无法打开输入文件”

BASH:具有默认参数值的 getopts

bash入门脚本(未完善)

具有多个字符串参数的 Bash 脚本

似乎可以从 bash 脚本中导出环境变量

bash脚本编程之算术运算