Почему я получаю сообщение «/bin/sh :Слишком длинный список аргументов» при передаче аргументов в кавычках?

Какой длины может быть командная строка, которую можно передать sh -c ''? (в bash и в оболочке bourne)

Предел намного ниже, чем у ОС (в случае современного Linux ).

Например:

$ /bin/true $(seq 1 100000)
$ /bin/sh -c "/bin/true $(seq 1 100000)"
bash: /bin/sh: Argument list too long

И как мне обойти эту проблему?

Обновление

Хочу отметить, что getconfздесь не поможет (, потому что это не предел системы):

$ seq 1 100000 | wc -c
588895
$ getconf ARG_MAX
2097152

Обновление #2

Теперь я понял, в чем тут дело. Это не предел оболочки, это системный предел, но на длину каждого аргумента, а не на весь список аргументов.

$ /bin/true $(seq 1 100000)
$ /bin/true "$(seq 1 100000)"
bash: /bin/true: Argument list too long

Спасибо, CodeGnome, за объяснение.

24
задан Todd A. Jacobs 14 July 2012 в 21:18
поделиться