Как автоматически добавить новый путь к переменной $PATH после пакетной установки об/мин?

Это похоже на задание для awk. Принятие Ваших журналов достаточно регулярно (в особенности, я извлекаю сеансовые куки как 6-е поле):

<foo.log awk '
  /about to call/ {target[$6]=$0;}
  /AbstractEngineServlet.*timeout/ {print target[$6]; print;}
'
4
16.08.2012, 01:44
2 ответа

Вы не можете изменить среду пользователя как этот. Вы могли попытаться добавить что-то к /etc/profile, но это - авария. Вы могли вставить файл /etc/profile.d, который лучше, но Ваш дистрибутив не мог бы поддерживать его. Лучшее решение состояло бы в том, чтобы поместить символьную ссылку от места, это уже находится в Вашем пути, например:

ln -s /weird/place/my-program /usr/bin/my-program
5
27.01.2020, 20:53

Все, что Вы сделали, должно было установить переменную на время сценария после установки. Это не влияет на путь больше нигде.

Системный путь установлен от многих местоположений, некоторые из них зависящий от распределения. Один путь, который существует везде, /etc/profile. Но сценарию установки пакета не позволяют изменить /etc/profile по правилам любого нормального распределения.

Реальный ответ на Ваш вопрос: не делайте этого. Если исполняемый файл принадлежит пути и обеспечивается пакетом, то исполняемый файл принадлежит /usr/bin. Вы не должны помещать сам исполняемый файл там: это - обычный путь, но нормально помещать символьную ссылку. Например, если все исполняемые файлы Вашей программы находятся в /usr/lib/myprogram/bin, затем свяжите тех, которые должны быть в пути в /usr/bin. Включайте символьные ссылки в об/мин, так, чтобы они были правильно прослежены диспетчером пакетов (не создавайте их в сценарии постустановки). Можно создать их в %install раздел спецификации об/мин, которая выполняется, когда об/мин создается (см. также Создающую символьную ссылку в/usr/bin при создании об/мин):

%install
…
ln -s ../../lib/myprogram/foo ../../lib/myprogram/bar ${RPM_BUILD_ROOT}%{_bindir}
1
27.01.2020, 20:53

Теги

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