Если я внесу изменения .bashrc
, как я могу перезагрузить его, не выходя из системы и не входя обратно?
Если я внесу изменения .bashrc
, как я могу перезагрузить его, не выходя из системы и не входя обратно?
Ответы:
Вам просто нужно ввести команду:
source ~/.bashrc
или вы можете использовать более короткую версию команды:
. ~/.bashrc
alias editbashrc='vim ~/.bashrc; source ~/.bashrc'
. Это сделает редактирование намного более плавным, поскольку вам не нужно думать о перезагрузке после выполнения редактирования, если вы используете собственный псевдоним.
Или вы можете использовать:
exec bash
Это делает то же самое, и его легче запомнить (по крайней мере, для меня).
Команда exec
полностью заменяет процесс оболочки, выполняя указанную командную строку. В нашем примере он заменяет текущую оболочку новым экземпляром bash
(с обновленными файлами конфигурации).
source .bashrc
командования и exec bash
?
source
это встроенная команда оболочки, которая выполняет содержимое файла, переданного в качестве аргумента, в текущей оболочке . Итак, в вашем примере он выполняет файл .bashrc в текущей оболочке. И exec
команда заменяет оболочку на заданную программу, в вашем примере она заменяет вашу оболочку на bash (с обновленными файлами конфигурации)
. ~/.bashrc
будет выполняться, dash
а не bash
, так что есть ошибка, потому что shopt
отсутствует. source
не найден в оболочке, так что решение также отсутствует. Я попробовал это, и образ докера выстроился плавно!
source ~/.bashrc
будет сохранять всю среду оболочки (хотя , вероятно , модифицированную отслеживанию источников ~/.bashrc
), в то время как exec bash
только сохранить вашу текущую оболочку в переменных окружении (любой одноранговые изменения в текущую оболочку в терминах переменной оболочки, функция, параметры теряются). В зависимости от ваших потребностей, один или другой подход может быть предпочтительным.
exec bash
. exec
Команда заменяет оболочку с программой, в нашем случае, Баш. Таким образом, в терминале всегда существует один экземпляр bash.
Чтобы дополнить и сопоставить два самых популярных ответа, . ~/.bashrc
а также exec bash
:
Оба решения эффективно перезагружаются ~/.bashrc
, но есть различия:
. ~/.bashrc
или source ~/.bashrc
будет сохранить текущую оболочку :
~/.bashrc
в текущую оболочку ( поиск ) делает, ток оболочка и его состояние являются сохранились , которая включает в себя переменные средах, оболочки, переменных оболочки, оболочка варианты функций и истории команд.exec bash
Или, более надежно, exec "$BASH"
[1] , будет заменить текущую оболочку с новым экземпляром, и поэтому только сохранить вашу текущую оболочку в переменных средах ( в то числе тех , которые вы определили одноранговые).
В зависимости от ваших потребностей, один или другой подход может быть предпочтительным.
[1] exec bash
теоретически может выполнить исполняемый файл, отличный bash
от того, который запустил текущую оболочку, если он существует в каталоге, указанном ранее в $PATH
. Поскольку специальная переменная $BASH
всегда содержит полный путь к исполняемому файлу, который запустил текущую оболочку, exec "$BASH"
гарантированно будет использоваться один и тот же исполняемый файл.
Примечание повторно "..."
вокруг $BASH
: двойные кавычки гарантирует , что значение переменной используется как есть, без интерпретации Bash; если значение не имеет встроенных пробелов или других метасимволов оболочки (что маловероятно в этом случае), вам не нужны двойные кавычки, но их использование - хорошая привычка для формирования.
exec $BASH
будет источником ~/.bashrc
, так что вы увидите его изменения в среде оболочки в новом сеансе.
Кто-то отредактировал мой ответ, чтобы добавить неверный английский, но здесь был оригинал, который уступает принятому ответу.
. .bashrc
~/
, но так как верхний ответ показывает оба, source ~/.bashrc
и . ~/.bashrc
мне интересно, должен ли этот ответ быть просто удален как избыточный.
В зависимости от вашей среды, просто набрав
bash
также может работать.
. ~/.bashrc
source ~/.bashrc
exec bash
exec
команда заменяет оболочку с заданной программой ... - WhoSayIn
exec bash
по-прежнему наследует окружение текущей оболочки. exec env -i bash
будет ближе (или exec env -i bash -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.
Я использовал 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
на самом деле новое имя пользователя, которое вы создали выше, и теперь войдите с помощью)
exec bash - отличный способ перезапустить и запустить новую оболочку, чтобы заменить текущую. Чтобы добавить к ответу, $ SHELL возвращает текущую оболочку bash. Используя следующее, он перезагрузит текущую оболочку, а не только bash.
exec $SHELL -l;
Для меня то, что работает, когда я меняю ПУТЬ, это: exec "$BASH" --login
~/.bashrc
, которая не--login
будет (непосредственно) перезагружаться; на уровне пользователя он будет перезагружен (или или ) вместо этого. ~/.bash_profile
~/.bash_login
~/.profile
я использую следующую команду на msysgit
. ~/.bashrc
укороченная версия
source ~/.bashrc
Предполагая интерактивную оболочку, вы хотите сохранить текущую историю команд, а также загрузить / etc / profile (который загружает данные среды, включая / etc / bashrc, а в Mac OS X загружает пути, определенные в /etc/paths.d/, через path_helper), добавьте историю команд и выполните команду bash с параметром входа в систему ('-l'):
history -a && exec bash -l
Я заметил, что чистая exec bash
команда сохранит переменные среды, поэтому вам нужно использовать exec -c bash
bash для запуска в пустой среде.
Например, вы входите в bash и export A=1
, если вы exec bash
, - A == 1
.
Если вы exec -cl bash
, A
пусто.
Я думаю, что это лучший способ сделать свою работу.
у меня лично есть
alias ..='source ~/.bashrc'
в моем bashrc, так что я могу просто использовать "..", чтобы перезагрузить его.
..
псевдоним для cd ..
, так что это будет очень запутанно.
alias rehash='source ~/.bashrc'
мой выбор
export PATH=$PATH:foo
а затем вы измените ее наexport PATH=$PATH:bar
. Если войти в систему и обратно, толькоbar
будет в PATH, но если вы делать то , что вы предлагаете, какfoo
иbar
будет в PATH. Вы знаете способ обойти это?