Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在循环的bash脚本中接触具有var名称的文件_Bash_For Loop_Touch_Var - Fatal编程技术网

无法在循环的bash脚本中接触具有var名称的文件

无法在循环的bash脚本中接触具有var名称的文件,bash,for-loop,touch,var,Bash,For Loop,Touch,Var,我正在为PiHole编辑一个脚本,将adblock列表格式转换为dns格式,以供PiHole使用。 其思想是滚动一个lists.list文件,其中包含指向不同列表的链接,对该文件的每个链接进行卷曲,并为每个名为$link.list的链接创建一个包含所有dns名称的文件 *问题是: 我收到消息“touch:cannottouch”:没有这样的文件或目录 我试着看看这是否是版权问题,所以我把它放到了我的主/用户文件夹中。 如果我这样做 curl--silent$source>>ads.txt 或

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

*问题是: 我收到消息“touch:cannottouch”:没有这样的文件或目录

我试着看看这是否是版权问题,所以我把它放到了我的主/用户文件夹中。 如果我这样做

curl--silent$source>>ads.txt

touch ads.txt
它起作用了

以下是我写的:

用于“cat list.list”中的源;做
echo$源
触摸“$source”。列表
echo`curl--silent$source`>$source.list
echo-e“\t`wc-l$source.list | cut-d”“-f 1`line下载”
完成
我得到

https://easylist-downloads.adblockplus.org/easylist.txt
触摸:不能触摸'https://easylist-downloads.adblockplus.org/easylist.txt.list':没有这样的文件或目录
有什么建议吗?
谢谢你的时间

这是因为您使用完整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 "\t`wc -l $filename | cut -d " " -f 1` lines downloaded"
done
#/bin/bash
对于“cat list.list”中的源;做
echo$源

文件名=$(sed-E's@.+/@@太好了!如果你满意,你可以把答案标为“接受”,然后我得到了一些甜蜜的、甜蜜的声誉点。一条评论:你为什么要使用
猫列表。列表
?我刚从原始文件中复制了它。这是迭代文件内容的多种方法之一。@saintamh:是的,但这似乎是UOOC的情况。最好使用while循环或类似的方法进行迭代。我编辑了你的帖子。感谢伟大的answeR