Если я внесу изменения в .bashrc
, как мне перезагрузить его, не выходя из системы и не возвращаясь в нее?
Как перезагрузить настройки .bashrc без выхода и повторного входа?
Ответы (16)
Вы можете ввести длинную команду:
source ~/.bashrc
или вы можете использовать более короткую версию команды:
. ~/.bashrc
export PATH=$PATH:foo
, а затем вы измените ее на export PATH=$PATH:bar
. Если вы войдете в систему и выйдете обратно, только bar
будет в PATH, но если вы сделаете то, что вы предлагаете, и foo
, и bar
будут в PATH. Вы знаете способ обойти это?
- person HighCommander4; 25.04.2013
alias editbashrc='vim ~/.bashrc; source ~/.bashrc'
. Это сделает редактирование более плавным, так как вам не нужно думать о перезагрузке после редактирования, если вы используете настраиваемый псевдоним.
- person Samuel Lampa; 12.11.2014
exec bash
- person zenw0lf; 24.12.2017
source ~/.bashrc
это выброс из текущего python virtualenv.
- person mrgloom; 01.07.2019
Или вы можете использовать:
exec bash
Это делает то же самое, и его легче запомнить (по крайней мере, для меня).
Команда exec
полностью заменяет процесс оболочки, выполняя указанную командную строку. В нашем примере он заменяет текущую оболочку новым экземпляром bash
(с обновленными файлами конфигурации).
source .bashrc
и exec bash
?
- person muradin; 20.11.2014
source
- это встроенная команда оболочки, которая выполняет содержимое файла, переданного в качестве аргумента, в текущей оболочке. Итак, в вашем примере он выполняет файл .bashrc в текущей оболочке. И команда exec
заменяет оболочку заданной программой, в вашем примере она заменяет вашу оболочку на bash (с обновленными файлами конфигурации)
- person WhoSayIn; 24.11.2014
/etc
, так и в /home
каталоге, и нам не нужно об этом заботиться.
- person Han; 31.03.2015
. ~/.bashrc
будет выполняться в dash
, а не в bash
, поэтому возникает ошибка из-за отсутствия shopt
. source
не найден в оболочке, так что и этого решения нет. Я попробовал это, и образ докера построился без проблем!
- person m59; 02.06.2015
. ~/.bashrc
не привело к перезагрузке моего файла пользовательских псевдонимов.
- person onebree; 07.10.2015
source ~/.bashrc
сохранит вашу всю среду оболочки (хотя, вероятно, будет изменена источником ~/.bashrc
), тогда как exec bash
сохранит только переменные среды вашей текущей оболочки (любые специальные изменения в текущая оболочка с точки зрения переменных оболочки, функции, параметры теряются). В зависимости от ваших потребностей может быть предпочтительнее тот или иной подход.
- person mklement0; 29.01.2016
exec bash
. Команда exec
заменяет оболочку программой, в нашем случае bash. Итак, в терминале всегда существует один экземпляр bash.
- person John Red; 20.05.2016
pushd
/ popd
будет удален (за исключением CWD), и ваше PS1
приглашение будет сброшено. Некоторые среды разработки, такие как virtualenv
/ venv
Python, изменяют ваши PATH
и другие переменные и помещают имя активной среды в ваше PS1
приглашение. После exec bash
переменные среды по-прежнему активны, но визуальный индикатор в приглашении PS1
гаснет. Кроме того, исчезли такие функции очистки, как deactivate
.
- person Kevin J. Chase; 26.09.2016
source
по какой-то причине не работал.
- person lowtechsun; 28.08.2019
Чтобы дополнить и противопоставить два самых популярных ответа, . ~/.bashrc
и exec bash
:
Оба решения эффективно перезагружают ~/.bashrc
, но есть различия:
. ~/.bashrc
илиsource ~/.bashrc
сохранит ваш текущий сеанс оболочки:- Except for the modifications that reloading
~/.bashrc
into the current shell (sourcing) makes, the current shell process and its state are preserved, which includes environment variables, shell variables, shell options, shell functions, and command history.
- Except for the modifications that reloading
exec bash
, или, что более надежно,exec "$BASH"
[1], заменит вашу текущую оболочку новым экземпляром, и поэтому сохраняются только переменные среды текущей оболочки (включая те, которые вы определили специально, во время сеанса).- In other words: Any ad-hoc changes to the current shell in terms of shell variables, shell functions, shell options, command history are lost.
В зависимости от ваших потребностей может быть предпочтительнее тот или иной подход.
[1] exec bash
теоретически может выполнить другой bash
исполняемый файл, чем тот, который запустил текущую оболочку, если он существует в каталоге, указанном ранее в $PATH
. Поскольку специальная переменная $BASH
всегда содержит полный путь к исполняемому файлу, запустившему текущую оболочку, exec "$BASH"
гарантированно будет использовать тот же исполняемый файл.
Примечание относительно "..."
вокруг $BASH
: двойные кавычки гарантируют, что значение переменной используется как есть, без интерпретации Bash; если значение не имеет встроенных пробелов или других метасимволов оболочки (что маловероятно в данном случае), вам не нужны строго двойные кавычки, но их использование является хорошей привычкой.
exec $BASH
будет источником ~/.bashrc
, поэтому вы увидите его изменения в среде оболочки в новом сеансе.
- person mklement0; 01.08.2017
Кто-то отредактировал мой ответ, чтобы добавить неправильный английский, но здесь был оригинал, который уступает принятому ответу.
. .bashrc
~/
, но поскольку в верхнем ответе показаны как source ~/.bashrc
, так и . ~/.bashrc
, мне интересно, следует ли просто удалить этот ответ как избыточный.
- person Max Ghenis; 01.12.2016
При этом вам не даже нужно набирать "source ~ / .bashrc":
Включите ваш файл bashrc:
alias rc="vim ~/.bashrc && source ~/.bashrc"
Каждый раз, когда вы хотите изменить свой bashrc, просто запускайте псевдоним «rc»
В зависимости от вашей среды просто введите
bash
также может работать.
. ~/.bashrc
Альтернативы
source ~/.bashrc
exec bash
exec
команда заменяет оболочку заданной программой ... - WhoSayIn
exec bash
по-прежнему наследует среду текущей оболочки. exec env -i bash
будет ближе (или exec env -i bash -l
, если вы в настоящее время находитесь в оболочке входа в систему).
- person chepner; 16.05.2017
exec bash - отличный способ повторно выполнить и запустить новую оболочку для замены текущей. просто чтобы добавить к ответу, $ SHELL возвращает текущую оболочку, которая является bash. Используя следующее, он перезагрузит текущую оболочку, и не только в bash.
exec $SHELL -l;
В зависимости от вашей среды вы можете добавить скрипт для автоматической загрузки .bashrc при открытии сеанса SSH. Недавно я сделал миграцию на сервер под управлением Ubuntu, и там по умолчанию загружается .profile, а не .bashrc или .bash_profile. Чтобы запускать любые сценарии в .bashrc, мне приходилось запускать source ~/.bashrc
каждый раз при открытии сеанса, что не помогает при удаленном развертывании.
Чтобы ваш .bashrc загружался автоматически при открытии сеанса, попробуйте добавить это в .profile:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Снова откройте сеанс, и он должен загрузить все пути / сценарии, которые у вас есть в .bashrc.
тип:
source ~/.bashrc
или, в более короткой форме:
. ~/.bashrc
.bashrc
. Как сказано в принятом ответе, более правильный способ сделать это - source ~/.bashrc
.
- person John Red; 20.05.2016
Для меня то, что работает, когда я изменяю PATH, это: exec "$BASH" --login
~/.bashrc
, которая --login
не (напрямую) перезагружается; на уровне пользователя вместо этого перезагрузится ~/.bash_profile
(или ~/.bash_login
, или ~/.profile
).
- person mklement0; 25.03.2019
Я использовал easyengine для настройки моего облачного сервера vultr.
Я нашел свой файл bash в /etc/bash.bashrc
.
Итак, source /etc/bash.bashrc
помог мне!
обновить
При настройке чистого сервера (ubuntu 16.04) вы можете использовать приведенную выше информацию, если вы еще не настроили имя пользователя и входите в систему через root.
Лучше всего создать пользователя (с правами sudo) и вместо этого войти под этим именем пользователя.
Это создаст каталог для ваших настроек, включая файлы .profile и .bashrc.
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/
Теперь вы отредактируете и (и "сделаете исходный") файл ~/.bashrc
.
На моем сервере он находился по адресу /home/your_username/.bashrc
(где your_username
- это фактически новое имя пользователя, которое вы создали выше, а теперь войдите с помощью)
Я использую следующую команду в msysgit
. ~/.bashrc
более короткая версия
source ~/.bashrc
Предполагая интерактивную оболочку, и вы хотите сохранить текущую историю команд, а также загрузить / etc / profile (который загружает данные среды, включая / etc / bashrc, а в Mac OS X загружает пути, определенные в /etc/paths.d/, через path_helper), добавьте историю команд и выполните команду exec bash с параметром входа ('-l'):
history -a && exec bash -l
Это тоже сработает ..
cd ~
source .bashrc
~
, чтобы сменить рабочий каталог на домашний каталог пользователя?
- person Kenly; 16.08.2018
Я заметил, что чистая команда exec bash
сохранит переменные среды, поэтому вам нужно использовать exec -c bash
для запуска bash в пустой среде.
Например, вы входите в bash, и export A=1
, если вы exec bash
, то A == 1
.
Если вы exec -cl bash
, A
пусто.
Я считаю, что это лучший способ выполнять свою работу.