Если я внесу изменения .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 bashbash для запуска в пустой среде.
Например, вы входите в 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. Вы знаете способ обойти это?