4 ms·
On (modern, i.e. 2.6.23 and later) Linux at least, you won't hit them quickly: $ getconf ARG_MAX 2097152 and if you do hit them, they're very easy to
by derobert 15y ago
On (modern, i.e. 2.6.23 and later) Linux at least, you won't hit them quickly:
$ getconf ARG_MAX
2097152
and if you do hit them, they're very easy to raise:
$ ulimit -s 32768
$ getconf ARG_MAX
8388608
xargs is still useful for its other features, of course.
- ptramo 15y ago# echo "2097152/$(echo "/my/still/quite/reasonable/path/to/a/file"|wc -c)"|bc 49932 linux-2.6 # git ls-files|wc -l 36747 Getting close! :) And I would guesstimate (Linux, kernel >= 2.6.23) to still be a fairly small amount of the machines people interact with professionally through a command line. And if in a script/snippet, you often want to cover a vast majority of the systems you _could_ end up with. Won't be System III, at least for me, but there has to be a RHEL5 system in a closet right? :)
- LukeShu 15y agoThat's the kernel's limit, Bash (3) has its own limit, which is significantly lower, I've hit it before. I think Bash 4 can do an arbitrary number of arguments, within the kernel's limit.
- derobert 15y agoNo, bash doesn't and didn't have its own limit. On an ancient system (Debian Sarge), ARG_MAX=131072: $ bash --version GNU bash, version 2.05b.0(1)-release (i386-pc-linux-gnu) Copyright (C) 2002 Free Software Foundation, Inc. $ strace bash -c '/bin/echo `seq 1 30000`' 2>&1 | grep exec execve("/bin/bash", ["bash", "-c", "/bin/echo `seq 1 30000`"], …) = 0 execve("/bin/echo", ["/bin/echo", "1", …) = -1 E2BIG (Argument list too long) As you can see, the argument list too long error came back from the execve syscall, i.e., from the kernel. (Note that I shortened the strace output to make it fit the page)