Несколько вопросов возникают при попытке перезагрузить/источник ~ /.profile. [Это относится к Ubuntu Linux - в некоторых случаях детали команд будет отличаться]
- Вы используете это непосредственно в терминале или в скрипте?
- Как вы запускаете это в скрипте?
Объявление. 1)
Выполнение этого непосредственно в терминале означает, что не будет создано подоболочки. Таким образом, вы можете использовать либо две команды:
source ~/.bash_profile
или
. ~/.bash_profile
В обоих случаях это будет обновлять среду с содержимым файла .profile.
Ad 2) Вы можете запустить любой Баш скрипт либо по телефону
sh myscript.sh
или
. myscript.sh
В первом случае это будет создавать подоболочку, которые не будут влиять на переменные среды вашего и они будут видны только для процесса подоболочки. После завершения команды subshell ни один из экспорта и т. Д. Не будет применяться. ЭТО ОБЩАЯ ОШИБКА И ПРИЧИНАЕТ БОЛЬШЕ РАЗРАБОТЧИКОВ, ЧТОБЫ ПОТЕРЯТЬ БОЛЬШЕ ВРЕМЕНИ.
Для того, чтобы ваши изменения, внесенные в сценарии, чтобы иметь эффект для глобальной окружающей среды сценарий должен быть запущен с помощью команды
.myscript.sh
.
Чтобы убедиться, что вы не используете скрипт, вы можете использовать эту функцию. (Опять же пример для оболочки Ubuntu)
#/bin/bash
preventSubshell(){
if [[ $_ != $0 ]]
then
echo "Script is being sourced"
else
echo "Script is a subshell - please run the script by invoking . script.sh command";
exit 1;
fi
}
Я надеюсь, что это очищает некоторые из распространенных заблуждений! : D Удачи!
Как указывает Игнасио ниже, ваш скрипт работает в подоболочке. Подселл не может изменять основную оболочку (дочерний процесс не может изменить родительский элемент). Поэтому вам нужно «запустить» сценарий, используя «.». (который также может быть записан как «источник»). Поэтому, если ваш скрипт хочет, скажем, изменить переменные среды, вам нужно сделать что-то вроде «source myscript» или «. Myscript» (они оба означают одно и то же). Это изменит среду вашей основной оболочки. (Я думаю, это то, что вы пытаетесь сделать, сообщите мне, если это не так.) – bstpierre
Я получил свой ответ из вашего вопроса :) –