5

I'm trying to enter a command with VERY big argument (1 MB in size), but it says "Argument list too long." How can I enter that argument?

OS: Linux Ubuntu

5
  • 2
    Depends on the OS.
    – ilkkachu
    Apr 27, 2017 at 17:11
  • @ilkkachu Linux Ubuntu
    – MCCCS
    Apr 27, 2017 at 17:11
  • 3
    Oh, right, a single big argument. Linux has a fixed limit for that, so you can't go over it without recompiling the kernel. See: What defines the maximum size for a command single argument?
    – ilkkachu
    Apr 27, 2017 at 17:14
  • 4
    What command are you attempting to use? Apr 27, 2017 at 17:21
  • 1
    1MB isn't very big, though it's bigger than ARG_MAX on my macOS Sierra (262144). On Ubuntu 16.04, it seems to be larger: docker run --rm ubuntu:latest getconf ARG_MAX produces 2097152 for me, so you should be able to pass 1MB of argument string on Ubuntu.
    – tripleee
    Apr 28, 2017 at 3:40

1 Answer 1

16

There is no way to pass an argument between executables if it is larger than the kernel's ARG_MAX limit.

If you have a list of arguments which is too long, splitting it up into smaller pieces can be done e.g. with xargs. This runs the command as many times as necessary, supplying as many arguments as will fit.

The syntax is xargs command <file. If you omit command, it displays its arguments, like echo.

As a demo,

xargs -n 4 </etc/motd

will print the first four tokens on one line (first invocation), the next four through another, etc. (The -n argument sets a maximum number of arguments, so this doesn't use the ARG_MAX limit at all.)

If the command you want to run has side effects which are undesirable, this might not work. For example, if the command will overwrite any previously existing ./a.out file, you will obviously be left with the results from just the last run after it finishes.

If you can configure or modify command so it reads a file, or standard input, instead of a command-line argument, that will work around the restriction. A file or stream can be much larger than ARG_MAX, and often is.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .