Перезагрузка .profile в скрипте раковины bash (в Unix)?
-
17-09-2020 - |
Вопрос
Я новичок в сценарии раковины Bash, и столкнулся с проблемой.Я знаю, что я могу перезагрузить файл ".profile", просто делая:
. .profile
.
Но я пытаюсь выполнить то же самое в скрипте Bash, я пишу, и он просто не работает. Любые идеи?Что-нибудь еще, я могу уточнить?
Спасибо
Решение
Попробуйте это перезагрузить текущую оболочку:
source ~/.profile
. Другие советы
Попробуйте:
cd
source .bash_profile
. Пара проблем возникает при попытке перезагрузить / исходный файл ~ / .profile. [Это относится к Ubuntu Linux - в некоторых случаях детали команд будут разными]
- Вы работаете прямо в терминале или в скрипте?
- Как вы запускаете это в скрипте?
ad. 1)
Пробегая это непосредственно в терминале, означает, что не будет создан подпункл. Таким образом, вы можете использовать либо две команды:
source ~/.bash_profile
.
или
. ~/.bash_profile
.
В обоих случаях это обновит среду с содержимым файла .profile.
ad 2) Вы можете начать любой скрипт Bash либо, вызывая
sh myscript.sh
.
или
. myscript.sh
.
Для того, чтобы ваши изменения, применяемые в вашем скрипте, чтобы повлиять на глобальную среду, скрипт должен быть запущен с
.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. Удачи!
Сценарий Bash работает в отдельном подселете.Для того, чтобы сделать эту работу, вам нужно будет источник и источник другого скрипта.
попробуйте:
#!/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 $@
echo my script continues here
' arg0 "$@"
.