Recursion wget与-r和-O挂起-

Recursion wget与-r和-O挂起-,recursion,stdout,wget,freeze,Recursion,Stdout,Wget,Freeze,这是一种非常奇怪的行为。我在debian 7.2上 wget -r -O - www.blankwebsite.com 永远挂着。我的意思是它挂起了,它不是在互联网上搜索, 我可以用策略验证它。 如果我这样做: while read R do wget -r -O - www.blankwebsite.com done < smallfile 对于空的test.html文件,结果相同。对我来说,这听起来像一只虫子。 使用-O myfile更改-O-或删除-r 我使用了-O-,因为

这是一种非常奇怪的行为。我在debian 7.2上

wget -r -O - www.blankwebsite.com
永远挂着。我的意思是它挂起了,它不是在互联网上搜索, 我可以用
策略验证它。
如果我这样做:

while read R
do
   wget -r -O - www.blankwebsite.com
done < smallfile
对于空的
test.html
文件,结果相同。对我来说,这听起来像一只虫子。
使用
-O myfile
更改
-O-
或删除
-r

我使用了
-O-
,因为我正在将输出传递给
grep


有人能解释一下吗?你见过类似的东西吗?

@tonjo:你能试试使用下面的代码吗

wget -r -O file www.blankwebsite.com
而不是使用

 wget -r -O - www.blankwebsite.com
当然:

 wget -r -O file www.blankwebsite.com
工作正常,但问题在于:

 wget -r -O - www.blankwebsite.com
挂断

同样的问题是,如果创建FIFO

mkfifo /tmp/myfifo
wget -r -O /tmp/myfifo www.blankwebsite.com
使用-r选项调用wget时,将尝试查找读取输出文件的HTML“a href=…”标记。由于输出文件是FIFO或标准输出(例如连字符“-”),因此无法找到任何标记并等待输入。然后,您将在读取系统调用中拥有一个wget进程waintg forever

要解决此问题,您可以: 1) 修补wget以处理此情况 2) 补丁wget不允许“-r-O-”组合。。。(只需检查'-O'的参数是否为常规文件) 3) 使用类似以下的解决方法:

TMPFILE=$(mktemp /tmp/wget.XXXXXX)
wget -r -O $TMPFILE www.blankwebsite.com
grep STRING $TMPFILE
rm $TMPFILE

如文件所述:

 Similarly, using '-r' or '-p' with '-O' may not work as you expect:
 Wget won't just download the first file to FILE and then download
 the rest to their normal names: _all_ downloaded content will be
 placed in FILE.  This was disabled in version 1.11, but has been
 reinstated (with a warning) in 1.11.2, as there are some cases
 where this behavior can actually have some use.

这是一个已知的问题,也是以某种方式下载的,对不可查找的文件使用-r和-O与wget将数据直接序列化到文件的方式不兼容。

如果仔细阅读整个问题,我就这样做了,我指出问题只存在于标准版本,我知道格式
-O文件
有效,我知道错误在于使用“-O-”,这正是我写的。你什么都读了吗?我的问题不同。为什么在
工作时将代码包含在
中?我的问题是:“你能解释一下吗?”和“你看到类似的东西了吗?”在while循环中,你有一个“read”和一个重定向“
关闭标准输入,而不是标准输出。与您之前所说的相同,
-r
将尝试查找正在读取的HTML标记。。。输出?为什么它应该读取输出??同样使用FIFO,wget从指定的站点读取行,而不是从输出!非常混乱的回答…对不起,我刚刚犯了一个错误。我试着更好地解释它。当使用“-r-O-”调用wget时,它从网站读取数据并将输出发送到stdout。但是,这只是第一个html页面。“-r”将在输出上搜索href标记。。。使用“-O-”可以将wget输出重定向到stdout,因此“-r”尝试读取stdout以查找href标记并执行递归。这是一个错误。正如我在第一个答案中所说,fifo也出现了同样的情况。您的while循环可以在
wget-r-O-www.blankwebiste.com中转换
 Similarly, using '-r' or '-p' with '-O' may not work as you expect:
 Wget won't just download the first file to FILE and then download
 the rest to their normal names: _all_ downloaded content will be
 placed in FILE.  This was disabled in version 1.11, but has been
 reinstated (with a warning) in 1.11.2, as there are some cases
 where this behavior can actually have some use.