Поскольку у вас есть существующий /etc/profile.d
каталог (и, предположительно, соответствующие /etc/profile
или /etc/${SHELL}rc
файлы, исходные файлы в этом каталоге ), я бы рекомендовал разместить /etc/profile.d/3rd-party-app.sh
и/или /etc/profile.d/3rd-party-app.csh
с требуемым кодом. Если вы являетесь упаковщиком стороннего -приложения, вы можете включить эти файлы в упаковку, чтобы они устанавливались, обновлялись и удалялись менеджером пакетов. В противном случае, как пользователь программного обеспечения, размещение этих файлов сделает их неуправляемыми и, следовательно, не будет затронуто обновлениями пакетов ОС.
ОБНОВЛЕНИЕ из OP:
https://www.suse.com/documentation/sles11/book_sle_admin/data/sec_adm_whatistheshell.html
/etc/профиль Не изменяйте этот файл, иначе ваши модификации могут быть уничтожены при следующем обновлении!
/etc/profile.local Используйте этот файл, если вы расширяете /etc/profile
/etc/profile.d/ Содержит общесистемные -файлы конфигурации для определенных программ
.
Я не очень понимаю ваш вопрос, но я думаю, что вы хотите:
perl -i -pe 's/oldstring/newstring/g' /some/file
Если вы запустите эту команду в оболочке (или сценарии оболочки ), она заменит oldstring
на newstring
везде в/some/file
Обратите внимание, что в вашем коде вы ищете «путь к папке с файлами», но затем забываете об этом пути в команде sed/perl (не уверен, что относительный путь в этом случае, но в моих тестах по умолчанию /
).
Почему бы просто не использовать incron для мониторинга самого файла и использовать
/path/to/file.xml IN_MODIFY,IN_NO_LOOP /bin/sed -i 's+/pub/+/+g' $@
ПРИМЕЧАНИЕ. Параметр:IN_NO_LOOP
предназначен для предотвращения того, чтобы команда sed запускала одно и то же событие при модификации.