Рекурсивно добавить каталог в переменную $ PATH

4

Можно ли рекурсивно добавить каталог в мою переменную $ PATH? Допустим, у меня есть структура каталогов, подобная следующей:

/usr/local/bin
    - /nodejs-x.x
    - /redis-x.x
    - /mongodb-x-x

Можно добавить /usr/local/bin в $ PATH и позволить ему рекурсивно покрывать подкаталоги?

ajackbot
источник

Ответы:

4

Не напрямую, нет. Записи в $PATH не являются рекурсивными

Что вы можете сделать, это:

for d in /usr/local/bin/*/; do
    PATH+=":$d"
done

Другой вариант - поместить символические ссылки в /usr/local/bin:

cd /usr/local/bin
ln -s myapp-1.2/myapp myapp
grawity
источник
Хорошо, имеет смысл. Есть ли разумное ограничение на длину переменной $ PATH? Я думаю, это может быть столько времени, сколько вы хотите, но есть ли какой-то недостаток в том, что он слишком длинный?
ajackbot
@jackweeden: блок окружения ограничен 1/4 разрешенного пространства стека (как показано ulimit -a; 2 МБ по умолчанию) и отдельные строки ( key=value пары) ограничены 32 страницами памяти (32 кБ для архитектуры объемом 4 КБ).
grawity
@jackweeden: незначительным недостатком является то, что все каталоги нужно будет проверять, одну за другой, для каждой команды, которую вы запускаете. Несмотря на то, что bash запоминает результаты после первого использования, он не делится этой информацией между экземплярами и забывает после выхода. С современными носителями это не так уж и много.
grawity