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)