Я передаю переменную сценарию в командной строке. Какое ограничение на количество символов в команде? например:
$ MyScript reallyreallyreally...reallyreallyreallylongoption
Спасибо.
Ограничение, накладываемое оболочкой / ОС, обычно составляет одну или двести тысяч символов.
getconf ARG_MAX
предоставит вам максимальный предел ввода для команды. В системе Debian у меня сейчас открыт терминал для этого возврата 131072
который 128*1024
. Предел уменьшается из-за ваших переменных среды, и, если моя память мне не изменяет, они передаются оболочкой в той же структуре, хотя в большинстве случаев это снимает только несколько сотен символов. Чтобы найти приблизительное значение этого значения, запустите env | wc -c
- это предлагает 325 символов в настоящее время для этого входа в систему на этом компьютере.
Сценарии, вероятно, позволят такую полную длину, но не исключено, что другие утилиты будут налагать свои собственные ограничения либо намеренно, либо из-за проблем с проектированием. Также могут существовать искусственные ограничения на длину отдельного аргумента в длинной командной строке и / или на длину пути к файлу.
ARG_MAX действительно ограничивает общий размер командной строки и среды, но вы сталкиваетесь с дополнительным ограничением: один аргумент не должен быть длиннее MAX_ARG_STRLEN (который, к сожалению, жестко запрограммирован как 131072).
Вы имеете в виду, какая самая длинная переменная длина? Чтобы понять это, вы можете использовать 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