我想做一些像
cat */httprobe-subdomains.out | xargs -n1 -I{} -t sh -c 'curl -k -i --write-out "n++++++++++nResponse Code: %{response_code}nRedirection URL: %{redirect_url}nContent Size: %{size_download}" "http://{}" -L >> response/http-{}.out '
响应是
-bash: /usr/bin/cat: Argument list too long
如果我尝试cat */httprobe-subdomains.out
,则错误将与-bash: /usr/bin/cat: Argument list too long
相同
我希望我有一种方法来逃避这种情况,并能够cat所有的httprobe子域。输出*文件夹中的文件,并将其交给xargs处理。
参数列表太长错误记录在errno(3)(作为E2BIG
)中,与GNU bash shell完成的一些执行(2)系统调用有关。使用sysconf(3)和ARG_MAX
查询该限制。
您有几种方法:
- 重新编译Linux内核以提高该限制。
- 用适当的系统调用写一些小的C程序(2)更合适,或者写一些Python脚本,或者一些GNU脚本,…做相同的
- 增加一些限制,但适当地使用setrlimit(2)(可能使用shell
ulimit
内置)。
参见GNU bash的文档和源代码