Я вполне уверен, ответ здесь ldconfig
.
ldconfig создает необходимые ссылки и кэш к новым общим библиотекам, найденным в каталогах, указанных на командной строке в файле/etc/ld.so.conf, и в доверяемых каталогах (/lib и/usr/lib). Кэш используется компоновщиком во время выполнения, ld.so, или ld-linux.so. ldconfig проверяет заголовок и имена файлов библиотек, с которыми он встречается при определении, каким версиям нужно обновить их ссылки.
Можно сделать cd
функция (и pop
и pushd
), и заставьте его обнаружить при вводе того конкретного каталога.
cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
unset_all_project_settings () {
# do whatever it takes to undo the effect of projectSettings.bash,
# e.g. unset variables, remove PATH elements, etc.
}
chpwd () {
case $PWD in
/some/directory|/some/other/directory) . ./projectSettings.bash;;
*) unset_all_project_settings;;
esac
}
Не делайте этого в каталогах, которые Вы не добавили в белый список, потому что это сделало бы очень легким для кого-то обмануть Вас в выполнение произвольного кода — отправляют Вам архив, таким образом, Вы разархивировали его, изменение в каталог, который это создало, и Вы теперь выполнили код взломщика.
Я не рекомендую этот подход, потому что это означает, что сценарий будет выполняться даже при вводе того каталога по некоторым причинам, это не связано с работой над проектом. Я предлагаю иметь определенную функцию, которая изменяется на каталог проекта и получает сценарий настроек.
myproj () {
cd /some/directory && . ./projectSettings.bash
}
direnv может быть тем, что вы ищете.
Вот пример из официальной документации:
$ cd ~/my_project
$ echo ${FOO-nope}
nope
$ echo export FOO=foo >.envrc
.envrc is not allowed
$ direnv allow.
direnv: reloading
direnv: loading.envrc
direnv export: +FOO
$ echo ${FOO-nope}
foo
$ cd..
direnv: unloading
direnv export: ~PATH
$ echo ${FOO-nope}
nope
cd
и существует с сомнением лучший путь. Даже использование $PROMPT_COMMAND лучше! – MageProspero 03.10.2011, 02:21if [ -z $MYSETTINGS ] ; then export MYSETTINGS=1 ; echo your settings here ; fi
. Это должно избежать проблем в случае, если Вы делаете что-то СОЕДИНЯЕТ =/mytools/bin каналом: вид $PATH инициализации. – spider 18.09.2015, 12:57