≡ Menu

Unix / Linux: Maximum Character Length of Arguments In a Shell Command

What is the maximum character length of arguments in a shell command? How do I find out the maximum length of arguments for a new process under Linux or Unix like operating systems?

If you get an error that read as – command: Argument list too long due to limit for the command line length. UNIX / Linux / BSD system has a limit on how many bytes can be used for the command line argument and environment variables. You need to use the getconf command to query system configuration variable called ARG_MAX.
ARG_MAX, maximum length of arguments for a new process

Fig.01: ARG_MAX, maximum length of arguments for a new process

Get maximum length of arguments for a new process

The following command will provide the upper limit for your system under Linux operating systems:
$ getconf ARG_MAX
Sample outputs:

2097152

So I can pass the 2097152 bytes worth args to any shell command. The following bash code will provide you exact number:

echo $(( $(getconf ARG_MAX) - $(env | wc -c) ))

POSIX suggests to subtract 2048 additionally so that the process may savely modify its environment:

expr `getconf ARG_MAX` - `env|wc -c` - `env|wc -l` \* 4 - 2048

Sample outputs:

2092496

Please note that the maximum length of arguments for a new process may differ among unix flavors. I recommend that you go through this web page for detailed information.

Share this tutorial on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:



{ 6 comments… add one }
  • Filipe October 3, 2012, 12:57 pm

    I understand that you subtract 2048 to allow process to modify env variables, I just don’t get it why you subtract byte count from env command, and line count? Could you explain it please? Thanks!

  • Jalal Hajigholamali October 4, 2012, 12:03 pm

    Hi,

    Please explain why you are using env| wc …

    thanks

    echo $(( $(getconf ARG_MAX) – $(env | wc -c) ))

    • nixCraft October 6, 2012, 8:35 am

      You need to get the effectively usable space. You need to consider the space consumption by both argv[] (arguments) and envp[] (environment). So you’ve to decrease ARG_MAX at least by the results of “env|wc -c” and “env|wc -l * 4”. POSIX suggests to subtract 2048 additionally so that the process may savely modify its environment. See linked article at the bottom of faq for more info.

  • Stef October 5, 2012, 5:24 pm

    My guess is that `env | wc -c` gives the size needed to store all environment variables (names and values). Envirnoment variables are not global. Each process has a fulk copy inherited from its parent process.

    `env | wc -l ` * 4 gives the number of environment variables multiplied by 4. This is probably the size needed to allocate a table of pointers (or offsets or sizes) to speedup the accesses to the environment variables.

  • mary ann smith October 11, 2012, 4:26 pm

    how do i find java for my tablet

  • Dan February 2, 2017, 8:32 am

    2097152 Jelly beans is the max? Why don’t you add the units of measurement. Are we talking about bytes? Character length?

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">


   Tagged with: , , , , , , , , ,