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