我使用这个 bash 命令:
cat urls.txt | xargs -d $"\n" -n 1 -P 250 php script.php $1
当它到达文件末尾时,urls.txt
它什么也不做。我的脚本(如果有问题)确实连接到网站并正在寻找<a href>
,但是如果我手动运行脚本php script.php http://url
,则工作正常,即使在运行 xargs 命令时有数百个网站urls.txt
,但如果文件足够大(几个MBs)达到时不执行任何操作EOF。
我的猜测是脚本没有问题,不知何故 xargs 无法检测到文件末尾,并且它一直等待输入。有什么解决办法吗?
编辑:我还尝试tail -n1 urls.txt
检查 EOF 是否有任何空数据,一切正常。
答案1
我不知道为什么你的xargs
-script 不起作用,也许最后没有换行符或其他一些-d
选项问题。由于较小的列表正在运行,因此某些行可能存在有问题的字符。
因此,-d $'\n'
我更喜欢使用-I{}
来避免问题并获得更多控制,而不是使用 。对于命令,使用{}
,它被每一行替换。
另外,你还有一个乌鲁木齐大学,xargs
提供-a
或--arg-file
选项:
-a 文件,--arg-file=文件从文件而不是标准输入中读取项目。如果使用此选项,则运行命令时 stdin 保持不变。否则,stdin 将从 /dev/null 重定向。
尝试:
xargs -a urls.txt -I{} -P 250 php script.php {}