wget挂起-r和-O -

ton*_*njo 3 recursion stdout wget hang

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

wget -r -O - www.blankwebsite.com
Run Code Online (Sandbox Code Playgroud)

永远挂起来.我的意思是它挂起,它不是通过互联网搜索,我可以验证它strace.如果我这样做:

while read R
do
   wget -r -O - www.blankwebsite.com
done < smallfile
Run Code Online (Sandbox Code Playgroud)

如果smallfile包含一行,则命令会在几秒钟后退出.

我也尝试过

wget -r -O - localhost/test.html
Run Code Online (Sandbox Code Playgroud)

用空test.html文件,结果相同.对我来说,这听起来像一个bug.
一切都正常运行变化-O -具有-O myfile或删除-r.
我用过-O -是因为我把输出传递给了grep.
谁能解释一下呢?你见过类似的东西吗?

小智 7

当然:

 wget -r -O file www.blankwebsite.com
Run Code Online (Sandbox Code Playgroud)

有效,但BUG是这样的:

 wget -r -O - www.blankwebsite.com
Run Code Online (Sandbox Code Playgroud)

挂!

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

mkfifo /tmp/myfifo
wget -r -O /tmp/myfifo www.blankwebsite.com
Run Code Online (Sandbox Code Playgroud)

wget,当使用-r选项调用时,将尝试查找HTML"a href = ..."标签读取输出文件.由于输出文件是FIFO或标准输出(例如HYPHEN char' - '),因此无法找到任何标记并等待INPUT.然后,您将在读取系统调用中永远拥有一个wget进程waintg.

要解决这个问题,你可以: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
Run Code Online (Sandbox Code Playgroud)