Если я внесу изменения .bashrc
, как я могу перезагрузить его, не выходя из системы и не входя обратно?
1645
Вам просто нужно ввести команду:
source ~/.bashrc
или вы можете использовать более короткую версию команды:
. ~/.bashrc
export PATH=$PATH:foo
а затем вы измените ее наexport PATH=$PATH:bar
. Если войти в систему и обратно, толькоbar
будет в PATH, но если вы делать то , что вы предлагаете, какfoo
иbar
будет в PATH. Вы знаете способ обойти это?alias editbashrc='vim ~/.bashrc; source ~/.bashrc'
. Это сделает редактирование намного более плавным, поскольку вам не нужно думать о перезагрузке после выполнения редактирования, если вы используете собственный псевдоним.Или вы можете использовать:
Это делает то же самое, и его легче запомнить (по крайней мере, для меня).
Команда
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
, так что вы увидите его изменения в среде оболочки в новом сеансе.Кто-то отредактировал мой ответ, чтобы добавить неверный английский, но здесь был оригинал, который уступает принятому ответу.
источник
~/
, но так как верхний ответ показывает оба,source ~/.bashrc
и. ~/.bashrc
мне интересно, должен ли этот ответ быть просто удален как избыточный.В зависимости от вашей среды, просто набрав
также может работать.
источник
При этом вам даже не нужно будет набирать «source ~ / .bashrc»:
Включите ваш файл bashrc:
Каждый раз, когда вы хотите отредактировать ваш bashrc, просто запустите псевдоним " rc "
источник
альтернативы
источник
exec bash
по-прежнему наследует окружение текущей оболочки.exec env -i bash
будет ближе (илиexec env -i bash -l
если вы в настоящее время в оболочке входа в систему).В зависимости от вашей среды вы можете захотеть добавить сценарии для автоматической загрузки .bashrc при открытии сеанса SSH. Недавно я выполнил миграцию на сервер под управлением Ubuntu, и там по умолчанию загружается .profile, а не .bashrc или .bash_profile. Для запуска любых сценариев в .bashrc мне приходилось запускать
source ~/.bashrc
каждый раз, когда открывался сеанс, что не помогает при запуске удаленного развертывания.Чтобы ваш .bashrc загружался автоматически при открытии сессии, попробуйте добавить это в .profile:
Снова откройте сеанс, и он должен загрузить все пути / сценарии, которые у вас есть в .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
тип:
source ~/.bashrc
или, в более короткой форме:
. ~/.bashrc
источник
.bashrc
находится. Как сказано в принятом ответе, более правильный способ сделать этоsource ~/.bashrc
.я использую следующую команду на msysgit
укороченная версия
источник
Предполагая интерактивную оболочку, вы хотите сохранить текущую историю команд, а также загрузить / etc / profile (который загружает данные среды, включая / etc / bashrc, а в Mac OS X загружает пути, определенные в /etc/paths.d/, через path_helper), добавьте историю команд и выполните команду 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'
мой выбор