Как перезагрузить .bashrc без выхода и повторного входа?

1111

Если я вношу изменения в .bashrc, как я могу перезагрузить его, не выходя из системы и обратно?

Теги:

10 ответов

1727
Лучший ответ

Вам просто нужно ввести команду:

source ~/.bashrc

или вы можете использовать более короткую версию команды:

. ~/.bashrc
  • 0
    Кажется, мне приходится делать это каждый раз, когда я открываю терминал ... есть ли способ автоматизировать его?
  • 71
    Это не то же самое, что вход в систему и выход из нее. Скажем, у вас есть следующая строка в .bashrc: export PATH=$PATH:foo , а затем вы измените ее на export PATH=$PATH:bar . Если вы войдете в систему и выйдете из нее, в ПУТИ будет только bar , но если вы сделаете то, что предлагаете, в foo будут и foo и bar . Вы знаете способ обойти это?
Показать ещё 8 комментариев
165

или вы можете использовать;

exec bash

делает то же самое. (и легче запомнить, по крайней мере для меня)

Команда

exec заменяет оболочку данной программой, в нашем примере она заменяет нашу оболочку bash (с обновленными файлами конфигурации)

  • 4
    Этот работал для меня на CentOS, спасибо.
  • 8
    Я думаю, что это самый элегантный.
Показать ещё 12 комментариев
50

В добавьте и сравните два самых популярных ответа: . ~/.bashrc и exec bash:

Оба решения эффективно перезагружают ~/.bashrc, но существуют различия:

  • source ~/.bashrc будет сохранить текущую оболочку:

    • За исключением изменений, которые перезагружает ~/.bashrc в текущую оболочку (источник), текущая оболочка и ее состояние сохраняются, которая включает переменные среды, переменные оболочки, параметры оболочки, функции оболочки, и история команд.
  • exec bash или, более надежно, exec "$BASH" [1], будет заменить текущую оболочку на новый экземпляр, и поэтому сохранит только текущие переменные среды оболочки (включая те, которые вы определили ad-hoc).

    • Другими словами: любые временные изменения текущей оболочки в терминах переменных оболочки, функций оболочки, параметров оболочки, истории команд теряются.

В зависимости от ваших потребностей может быть предпочтительным один или другой подход.


[1] exec bash мог теоретически выполнить другой исполняемый файл bash, чем тот, который запустил текущую оболочку, если она существует в каталоге, указанном ранее в $PATH. Поскольку специальная переменная $BASH всегда содержит полный путь к исполняемому файлу, который запустил текущую оболочку, exec "$BASH" гарантированно использует тот же исполняемый файл.
Примечание re "..." вокруг $BASH: двойное кавывание гарантирует, что значение переменной используется как есть, без интерпретации Bash; если значение не имеет встроенных пространств или других метасимволов оболочки (что в данном случае маловероятно), вам не нужны только двойные кавычки, но использование их - хорошая привычка формироваться.

  • 0
    Вы ответили на мой вопрос, прежде чем я смог его задать. Это хорошо знать; Я часто устанавливаю свой CLASSPATH для одного сеанса.
  • 0
    Так что даже если я вызову exec "$ BASH", найдутся ли переменные, которые устанавливает .bashrc, в командной оболочке, которую я открою следующей (используя тот же исполняемый файл, что и мой текущий сеанс)?
Показать ещё 2 комментария
44

. .bashrc

...

  • 24
    Это будет работать только в том случае, если ваш текущий каталог фактически является вашим домашним каталогом. Следующее будет работать:. ~ / .Bashrc
  • 6
    Что делает эту работу? Что на самом деле происходит, когда я делаю ".bashrc"? Спасибо!
Показать ещё 5 комментариев
14

В зависимости от вашей среды просто введите

bash

также может работать.

  • 15
    Тем не менее, это вызовет новую оболочку в текущей, тратя таким образом ресурсы. Лучше использовать exec- решение @ WhoSayln, которое заменяет текущую оболочку вновь вызванной.
  • 0
    да, просто используйте источник. Это совершенно ненужно и раздражает.
Показать ещё 2 комментария
9

При этом вы не будете даже вводить "source ~/.bashrc":

Включите файл bashrc:

alias rc="vim ~/.bashrc && source ~/.bashrc"

Каждый раз, когда вы хотите отредактировать свой bashrc, просто запустите псевдоним " rc"

5

TL; DR

. ~/.bashrc

TMI

. ~/.bashrc

. это BASH ярлык для встроенной команды "source". - Брайан Шоуолтер

source ~/.bashrc

Alternative

exec bash
  • source - это встроенная команда оболочки, которая выполняет содержимое файла, переданного как аргумент, в текущей оболочке.
  • exec команда заменяет оболочку заданной программой...
  • - WhoSayIn
  • 2
    exec bash прежнему наследует среду текущей оболочки. exec env -i bash будет ближе (или exec env -i bash -l если вы сейчас находитесь в оболочке входа в систему).
2

Я использую следующую команду в msysgit

. ~/.bashrc

более короткая версия

source ~/.bashrc
  • 6
    Это был принятый ответ в течение 4 лет?
  • 0
    @jwg принятый ответ. .bashrc. будет работать только если вы находитесь в домашнем каталоге на msysgit.
Показать ещё 4 комментария
2

Тип:

source .bashrc
  • 1
    Опять же, работает, только если вы находитесь в домашнем каталоге, или, точнее, в каталоге, где находится .bashrc . Как сказано в принятом ответе, более правильный способ сделать это - source ~/.bashrc .
1

Это также сработает.

cd ~
source .bashrc
  • 7
    Это так, но он также меняет рабочий каталог на ~, что не нужно.
  • 1
    Спасибо за поддержку контекста @Krinkle
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню