Если работы с ядром Linux достаточно, вы можете просто сделать
ulimit -S -s unlimited
Это сработает, потому что около 10 лет назад ядро Linux включало исправление, которое изменило лимит аргументов, чтобы он основывался на размере стека:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b6a2fea39318e43fee84fa7b0b90d68bed92d2ba
Если вам не нужно неограниченное пространство стека, вы можете сказать, например,.
ulimit -S -s 100000
, чтобы ограничить стек до 100 МБ. Обратите внимание, что вам нужно установить пространство стека для нормального использования стека (, обычно 8 МБ )плюс размер командной строки, которую вы хотели бы использовать.
Вы можете запросить фактическое ограничение следующим образом:
getconf ARG_MAX
, который выведет максимальную длину командной строки в байтах. Например, по умолчанию в Ubuntu установлено значение 2097152
, что означает примерно 2 МБ. Если я работаю с неограниченным стеком, я получаю 4611686018427387903
, что равно 2 ^ 62 или около 46000 ТБ. Если ваша командная строка превышает по сравнению с , я ожидаю, что вы сможете решить проблему самостоятельно.
Можем ли мы использоватьgrep
:
echo 1 33 56 | grep --color -E '[5-9][0-9]|[1-9][0-9][0-9]+'