Ответ на ваш конкретный вопрос заключается в том, что часто загружается только /etc/bash.bashrc
(или /etc/bashrc
).
Кажется, есть несколько способов решить эту проблему, но, к сожалению, большинство из них - обходные пути. В произвольном порядке предпочтения:
Поддельный логин
При входе в систему запускается /etc/profile
и вы часто можете размещать свои собственные сценарии в /etc/profile.d/*.sh
Оберните это в логин bash
Иногда проще всего запустить логин, т.е.
echo "do whatever $PATH $BASH $PS1 $0"
становится
bash -lc 'echo "do whatever $PATH $BASH $PS1 $0"'
Вручную загрузить профиль
Делайте то, что делают логины, загружайте профиль вручную
source /etc/profile;echo "do whatever $PATH $BASH $PS1 $0"
Изменить глобальные переменные среды
Для простых переменных, которые вы можете добавить в /etc/environment
смотрите Ubuntu System-wide_environment_variables, но расширение переменных не работает
THING_HOME="/opt/thing"
PATH="$PATH:/opt/thing" # this will NOT work
Для PATH вы можете добавить к нему, например, sudo sed -i 's#PATH=\"[^\"]*#&:/opt/thing#' /etc/environment
Редактировать все оболочки Bash
Вы можете добавить в /etc/bash.bashrc
(или /etc/bashrc
), однако обычно это происходит рано, если не интерактивен, так что вам нужно взломать ваши дополнения до:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Не делай ничего из этого
- Рассмотрим символические ссылки, если вы пытаетесь что-то добавить в PATH
- Подумайте о том, чтобы заставить ваши программы / скрипты изменять свою среду
- В Systemd есть
EnvironmentFile
и Environment
например, systemctl edit --full cron.service
Мне интересно услышать, есть ли у кого-то еще лучшие обходные пути!