Назад | Перейти на главную страницу

Ограничение на количество символов в командной строке Linux

Я передаю переменную сценарию в командной строке. Какое ограничение на количество символов в команде? например:

$ MyScript reallyreallyreally...reallyreallyreallylongoption

Спасибо.

Ограничение, накладываемое оболочкой / ОС, обычно составляет одну или двести тысяч символов.

getconf ARG_MAX предоставит вам максимальный предел ввода для команды. В системе Debian у меня сейчас открыт терминал для этого возврата 131072 который 128*1024. Предел уменьшается из-за ваших переменных среды, и, если моя память мне не изменяет, они передаются оболочкой в ​​той же структуре, хотя в большинстве случаев это снимает только несколько сотен символов. Чтобы найти приблизительное значение этого значения, запустите env | wc -c - это предлагает 325 символов в настоящее время для этого входа в систему на этом компьютере.

Сценарии, вероятно, позволят такую ​​полную длину, но не исключено, что другие утилиты будут налагать свои собственные ограничения либо намеренно, либо из-за проблем с проектированием. Также могут существовать искусственные ограничения на длину отдельного аргумента в длинной командной строке и / или на длину пути к файлу.

ARG_MAX действительно ограничивает общий размер командной строки и среды, но вы сталкиваетесь с дополнительным ограничением: один аргумент не должен быть длиннее MAX_ARG_STRLEN (который, к сожалению, жестко запрограммирован как 131072).

Видеть https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument

Вы имеете в виду, какая самая длинная переменная длина? Чтобы понять это, вы можете использовать Perl "x" для создания очень длинного имени переменной:

 VAR=`perl -e 'print "a"x131071'` ; bash a.sh $VAR

В моей системе 131071 работает:

и переменная напечатана на 131072, она слишком велика:

VAR=`perl -e 'print "a"x131072'` ; bash a.sh $VAR
bash: /bin/bash: Argument list too long