Ответ 1
Попробуйте перезагрузить текущую оболочку:
source ~/.profile
Я новичок в сценариях оболочки bash и сталкивался с проблемой. Я знаю, что могу перезагрузить мой файл .profile, просто сделав:
. .profile
но я пытаюсь выполнить то же самое в bash script, который я пишу, и он просто не работает. Есть идеи? Что-нибудь еще, что я могу предоставить, чтобы уточнить?
Спасибо
Попробуйте перезагрузить текущую оболочку:
source ~/.profile
Попробуйте следующее:
cd
source .bash_profile
bash script выполняется в отдельной подоболочке. Чтобы выполнить эту работу, вам также нужно будет установить этот другой script.
При попытке перезагрузить/исходный файл ~/.profile возникает пара проблем. [Это относится к Ubuntu linux - в некоторых случаях детали команд будут разными)
Ad. 1)
Выполнение этого непосредственно в терминале означает, что не будет создана подселлем. Таким образом, вы можете использовать две команды:
source ~/.bash_profile
или
. ~/.bash_profile
В обоих случаях это обновит среду с содержимым файла .profile.
Объявление 2) Вы можете запустить любой bash script либо путем вызова
sh myscript.sh
или
. myscript.sh
В первом случае это создаст подоболочку, которая не повлияет на переменные среды вашей системы, и они будут видны только для процесса подоболочки. После завершения команды subshell ни один из экспорта и т.д. Не будет применяться. ЭТО ОБЩАЯ ОШИБКА И ПРИЧИНАЕТ БОЛЬШЕ РАЗРАБОТЧИКОВ, ЧТОБЫ ПОТЕРЯТЬ МНОГО ВРЕМЕНИ.
Чтобы ваши изменения, применяемые в вашем script, имели эффект для глобальной среды, script должен быть запущен с
.myscript.sh
команды.
Чтобы убедиться, что вы не используете script на подходе, вы можете использовать эту функцию. (Снова пример для оболочки 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 Удачи!
Try:
#!/bin/bash
# .... some previous code ...
# help set exec | less
set -- 1 2 3 4 5 # fake command line arguments
exec bash --login -c '
echo $0
echo [email protected]
echo my script continues here
' arg0 "[email protected]"