Почему мой путь не обновляется * сейчас *?

1270
bobby

Я недавно установил новейший Qt SDK, и я добавил его в свой PATH внутри моего ~ / .bash_profile.

Я не вижу изменений. Я могу, source ~/.bash_profileно тогда мой путь вдвое длиннее, но я не могу просто открыть новый gnome-терминал и обновить путь.

Зачем?

Примечания: Fedora 11 под управлением GNU bash, версия 4.0.16 (1), выпущена на рабочем столе gnome по умолчанию.

Конфигурация пути .bash_profile:

# User specific environment and startup programs  PATH=$PATH:$HOME/bin:/opt/qtsdk-2009.03/qt/bin/:/usr/local/lib/ 
1

2 ответа на вопрос

8
heavyd

Когда вы просто открываете терминал со своего рабочего стола, он наследует среду, в которой он был запущен, включая эту переменную PATH. Когда вы открываете терминал, в документации Bash происходит следующее:

Из справочного руководства Bash

Когда Bash вызывается как интерактивная оболочка входа в систему или как неинтерактивная оболочка с параметром --login, она сначала читает и выполняет команды из файла / etc / profile, если этот файл существует. После прочтения этого файла он ищет ~ / .bash_profile, ~ / .bash_login и ~ / .profile в указанном порядке, а также читает и выполняет команды из первой, которая существует и доступна для чтения. Опция --noprofile может использоваться, когда оболочка запущена, чтобы запретить это поведение.

Когда оболочка входа в систему закрывается, Bash читает и выполняет команды из файла ~ / .bash_logout, если он существует.

А также...

Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, Bash читает и выполняет команды из ~ / .bashrc, если этот файл существует. Это может быть запрещено с помощью параметра --norc. Опция --rcfile file заставит Bash читать и выполнять команды из файла вместо ~ / .bashrc.

Так что, как правило, ваш ~ / .bash_profile содержит строку

 if [ -f ~/.bashrc ]; then . ~/.bashrc; fi 

после (или до) любых инициализаций, специфичных для входа в систему.

Таким образом, чтобы запустить ваш .bash_profile, вам необходимо войти в оболочку входа в систему, возможно, выполнив ssh-в localhost или выйдя из среды рабочего стола и снова войдя в систему ..

Я только что столкнулся с этим на странице руководства. Ты подтолкнул меня на это! Спасибо за помощь bobby 14 лет назад 0
1
Dennis Williamson

Попробуйте вставить это в свой ~/.bashrcвместо этого.

Когда вы входите, ~/.bash_profileобрабатывается. Он не обрабатывается снова, когда вы открываете новый терминал или запускаете новую оболочку, то есть, когда ~/.bashrcобрабатывается. Вы должны источник ~/.bashrcв вашем ~/.bash_profile.

Смотрите раздел "Invocation" в man bash.