如何将wget输出写入文件?为何HTTP头写入文件后为空?
为啥你的wget命令没把HTTP头写入文件?
嘿,我来帮你捋清楚这俩命令为啥没生效~核心问题出在wget参数的输出流向和--spider模式的特性上:
第一个命令的问题:wget -S --spider -O SESSIONS.txt 'mysite.com'
--spider是蜘蛛模式,这个模式下wget只会检查目标URL是否可达,不会下载任何实际内容。而-O参数是用来指定「下载内容」的输出文件,既然没内容可下载,SESSIONS.txt自然是空的。- 另外,
-S(显示HTTP头)的输出是发送到标准错误流(stderr),不是标准输出流(stdout),-O只能捕获stdout的内容,所以头信息根本没被写到文件里。
第二个命令的问题:wget -S --spider 'mysite.com' > SESSIONS.txt
>符号是重定向**标准输出流(stdout)**到文件,但-S的头信息在stderr里,而蜘蛛模式下stdout本身就没有输出内容,所以文件还是空的。
正确的写法
要把HTTP头写入文件,你需要把stderr的内容重定向到文件,或者合并所有输出流:
方法1:只捕获HTTP头(仅重定向stderr)
wget -S --spider 'mysite.com' 2> SESSIONS.txt
这里的2>就是专门把标准错误流(文件描述符为2)重定向到指定文件。
方法2:合并所有输出到同一个文件
如果想同时捕获所有输出(包括蜘蛛模式下可能出现的少量stdout内容),可以用:
wget -S --spider 'mysite.com' &> SESSIONS.txt
或者兼容更老Shell环境的写法:
wget -S --spider 'mysite.com' > SESSIONS.txt 2>&1
这样就能把HTTP头成功写入SESSIONS.txt啦~
内容的提问来源于stack exchange,提问作者user1592380




