Есть ли символьное ограничение на длину переменной PATH в macOS? Или существует ли ограничение на количество двоичных файлов, на которые вы можете ссылаться в своем пути?
Есть ли символьное ограничение на длину переменной PATH в macOS? Или существует ли ограничение на количество двоичных файлов, на которые вы можете ссылаться в своем пути?
Ответы:
Размер переменной зависит от ограничений аппаратного обеспечения, на котором он запущен, то есть переменная может составлять миллионы байтов. Но переменная окружения, такая как PATH, подвержена системным ограничениям (ARG_MAX), поскольку вся среда передается системному вызову execve
. Таким образом, разумной оценкой максимального размера переменной среды будет байты, используемые в текущей среде env | wc -c
, плюс разумный буфер байтов, необходимый для выполнения команд в оболочке, - 2048 байтов до 4096 байтов, вычтенные из максимального числа. байтов, разрешенных в аргументе - 262144 байта. Возможность использования переменной окружения такого размера является еще одной проблемой.
Оболочка начинает поиск по крайнему левому пути, указанному в переменной PATH, затем переходит к следующему и следующему, пока не найдет введенную вами команду. Оболочка также ведет запись этой команды, поэтому ей не нужно снова искать переменную PATH в текущем сеансе. Это указывает на то, что поиск PATH стоит дорого. Таким образом, максимальный размер вашей переменной PATH должен быть настолько мал, насколько вы можете это сделать.
В принципе, вы никогда не достигнете предела, если у вас будет какой-нибудь разумный ПУТЬ.
Я только что попробовал иметь переменную PATH длиной 96 кБ (неоправданно длинная). На High Sierra работает без проблем.
Если я увеличу его до 128 кБ, у меня начнутся проблемы с запуском команд, поскольку они не будут работать из-за большой среды. Среда PATH сохраняется.