
Я пытаюсь ввести команду с ОЧЕНЬ большим аргументом (размером 1 МБ), но появляется сообщение «Список аргументов слишком длинный». Как мне ввести этот аргумент?
ОС: Linux Ubuntu
решение1
Невозможно передать аргумент между исполняемыми файлами, если он превышает ARG_MAX
ограничение ядра.
Если у тебя естьСписокаргументы, которые слишком длинные, можно разбить их на более мелкие части, например, с помощью xargs
. Это запустит команду столько раз, сколько необходимо, предоставив столько аргументов, сколько поместится.
Синтаксис xargs command <file
. Если опустить command
, то будут отображены его аргументы, например echo
.
В качестве демонстрации,
xargs -n 4 </etc/motd
выведет первые четыре токена на одной строке (первый вызов), следующие четыре — через одну и т. д. (Аргумент задает максимальное количество аргументов, поэтому здесь ограничение вообще -n
не используется .)ARG_MAX
Если команда, которую вы хотите запустить, имеет нежелательные побочные эффекты, это может не сработать. Например, если команда command
перезапишет любой ранее существующий ./a.out
файл, вы, очевидно, останетесь с результатами только последнего запуска после его завершения.
Если вы можете настроить или изменить command
так, чтобы он считывал файл или стандартный ввод вместо аргумента командной строки, это обойдёт ограничение. Файл или поток может быть намного больше, чем ARG_MAX
, и часто так и есть.