xargs 到达 EOF 后并未结束

xargs 到达 EOF 后并未结束

我使用这个 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 {}

相关内容