Выполните сценарии удара при вводе каталога

Я вполне уверен, ответ здесь ldconfig.

ldconfig создает необходимые ссылки и кэш к новым общим библиотекам, найденным в каталогах, указанных на командной строке в файле/etc/ld.so.conf, и в доверяемых каталогах (/lib и/usr/lib). Кэш используется компоновщиком во время выполнения, ld.so, или ld-linux.so. ldconfig проверяет заголовок и имена файлов библиотек, с которыми он встречается при определении, каким версиям нужно обновить их ссылки.

http://linux.die.net/man/8/ldconfig

41
24.09.2011, 22:53
2 ответа

Можно сделать 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
}
47
27.01.2020, 19:35
  • 1
    я только запустил в Ruby только что. Инструмент RVM tho находится полностью в Bash и одной из лучших частей волшебства Bash, которое я видел. Я думаю, что ответ немного глуп, потому что одна из абсолютно худших вещей, которые можно когда-либо делать, является по поездке чем-то как cd и существует с сомнением лучший путь. Даже использование $PROMPT_COMMAND лучше! –  MageProspero 03.10.2011, 02:21
  • 2
    я был абсолютно неправ, и принести извинения. RVM перегружал CD. –  MageProspero 07.10.2011, 17:22
  • 3
    (удалил некоторый тангенциальный про/антирубиновый материал из этого потока комментария) –  Michael Mrozek♦ 26.07.2012, 00:04
  • 4
    в projectSettings.bash, я предлагаю, чтобы Вы добавили переменную флага для не повторения инициализации в случае, если Вы выходите/повторно вводите из каталога. Поэтому включите все в if [ -z $MYSETTINGS ] ; then export MYSETTINGS=1 ; echo your settings here ; fi. Это должно избежать проблем в случае, если Вы делаете что-то СОЕДИНЯЕТ =/mytools/bin каналом: вид $PATH инициализации. –  spider 18.09.2015, 12:57
  • 5
    @spider Скорее должен быть некоторым механизмом сброса при отъезде каталога. Если Вы уезжаете и повторно вступаете, необходимо вернуть настройки! –  Gilles 'SO- stop being evil' 18.09.2015, 13:11

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
6
20.08.2021, 13:33

Теги

Похожие вопросы