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

вопрос создан в Tue, Sep 11, 2018 12:00 AM

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

    
1414
17 ответов                              17                         

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

 
source ~/.bashrc

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

 
. ~/.bashrc
    
2275
2014-10-09 17: 47: 54Z
  1. Это не то же самое, что вход в систему и выход из нее. Скажем, у вас была следующая строка в .bashrc: export PATH=$PATH:foo, а затем вы изменили ее на export PATH=$PATH:bar. Если вы войдете в систему и выйдете из нее, в ПУТИ будет только bar, но если вы сделаете то, что вы предлагаете, в ПУТИ будут и foo, и bar. Вы знаете, как обойти это?
    2013-04-25 01: 09: 29Z
  2. @ HighCommander4 - очень неудовлетворительный способ сделать то, что вы хотите, это выполнить "bash -l", однако это фактически создает новую подоболочку, и когда вы выходите из системы ' Вернемся к закрывающей оболочке, где "foo" все еще находится в PATH. Если вы просто заинтересованы в PATH, вы можете сделать «unset PATH» и восстановить его с нуля, но, вероятно, проще /безопаснее сделать «PATH = /bin: /usr /bin» перед поиском вашего .bashrc. То, как переменная PATH создается при входе в систему, на самом деле достаточно сложное, включая как минимум ввод данных из имени входа (см. «Man login») и /etc /profile (см. «Man bash»).
    2013-09-09 10: 36: 20Z
  3. @ Алекс, вы можете автоматизировать его, добавив строку ~ /.bashrc в ~ /.bash_profile, хотя я не знаю, является ли это хорошей практикой.
    2013-10-24 08: 55: 57Z
  4. Я также рекомендовал бы создать псевдоним (который можно сохранить в ~ /.bashrc или ~ /.bash_aliases), который открывает .bashrc и перезагружает его после выхода из редактора , Вы можете сделать это, комбинируя две команды в псевдониме, например, вот так (если vim - ваш предпочитаемый редактор, иначе поменяйте его на что-то другое): alias editbashrc='vim ~/.bashrc; source ~/.bashrc'. Это сделает редактирование намного более плавным, поскольку вам не нужно думать о перезагрузке после выполнения редактирования, если используется пользовательский псевдоним.
    2014-11-12 07: 40: 50Z
  5. Это повлияет на только текущий терминал.
    2015-03-16 23: 26: 54Z

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

 
exec bash

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

Команда

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

    
236
2015-10-01 08: 59: 00Z
  1. начало bash ...
    2014-09-11 14: 23: 44Z
  2. Не могли бы вы объяснить разницу между командами source .bashrc и exec bash?
    2014-11-20 07: 42: 34Z
  3. @ muradin, source - это встроенная команда оболочки, которая выполняет содержимое файла, переданного в качестве аргумента, в текущей оболочке . Итак, в вашем примере он выполняет файл .bashrc в текущей оболочке. И команда exec заменяет оболочку на заданную программу, в вашем примере она заменяет вашу оболочку на bash (с обновленными файлами конфигурации)
    2014-11-24 13: 15: 47Z
  4. Элегантно, но "делает то же самое" не совсем правильно. source ~/.bashrc сохранит вашу всю среду оболочки (хотя, вероятно, измененную источником ~/.bashrc), тогда как exec bash сохранит только переменные среды вашей текущей оболочки (любые специальные изменения в текущая оболочка в терминах переменных оболочки, функции, параметры теряются). В зависимости от ваших потребностей, тот или иной подход может быть предпочтительным.
    2016-01-28 22: 49: 21Z
  5. @ SEoF, когда вы говорите "bash inception" и если вы думаете, о чем я думаю, вы должны сказать, что вы не правы. В отличие от фильма, вы не продолжаете ходить в bash с bash, когда вы постоянно делаете exec bash. Команда exec заменяет оболочку на программу, в нашем случае bash. Таким образом, в терминале всегда существует один экземпляр bash.
    2016-05-20 17: 07: 52Z

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

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

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

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

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

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

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

    
105
2019-03-24 20: 48: 55Z
  1. Вы ответили на мой вопрос, прежде чем я смог его задать. Это хорошо знать; Я часто устанавливаю свой CLASSPATH для одного сеанса.
    2016-04-07 08: 22: 36Z
  2. Таким образом, даже если я вызову exec "$BASH", переменные, которые устанавливает .bashrc, будут найдены в командной оболочке, которую я открою следующей (используя тот же исполняемый файл, что и мой текущий сеанс)
    2017-08-01 08: 49: 16Z
  3. @ nitinr708: Да, exec $BASH будет источником ~/.bashrc, поэтому вы увидите его изменения в среде оболочки в новом сеансе.
    2017-08-01 12: 45: 31Z
  4. @ Gaming32, я ценю идею гиперссылки на сноску, но на самом деле она не сработала (и в таком коротком ответе, как этот, не все это важно).
    2019-03-24 20: 49: 56Z

Кто-то отредактировал мой ответ, чтобы добавить неверный английский, но здесь был оригинал, который уступает принятому ответу.

 
. .bashrc
    
45
2018-01-25 13: 26: 56Z
  1. Это будет работать только в том случае, если ваш текущий каталог фактически является вашим домашним каталогом. Следующее будет работать:. ~ /.Bashrc
    2010-03-25 18: 09: 36Z
  2. Что делает эту работу? Что на самом деле происходит, когда я делаю ".bashrc"? Спасибо!
    2010-03-25 18: 34: 20Z
  3. . является ярлыком BASH для встроенной команды «source». Таким образом, ". .Bashrc" аналогично ".bashrc" для интерпретатора BASH.
    2010-03-25 18: 45: 28Z
  4. Круто. Благодарю. Теперь, когда я не знал.
    2010-03-25 18: 49: 09Z
  5. Я только что отправил запрос на изменение, чтобы добавить ~/, но, поскольку в верхнем ответе отображаются как source ~/.bashrc, так и . ~/.bashrc, мне интересно, должен ли этот ответ быть просто удален как избыточный.
    2016-12-01 00: 04: 12Z

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

 
bash

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

    
18
2012-03-08 11: 51: 51Z
  1. Тем не менее, это вызовет новую оболочку в текущей, тратя таким образом ресурсы. Лучше использовать exec решение @ WhoSayln, которое заменяет текущую оболочку новой вызванной.
    2013-09-04 09: 45: 49Z
  2. да, просто используйте источник. Это совершенно не нужно и раздражает.
    2014-09-23 20: 50: 34Z
  3. В дополнение к комментарию @ BernhardWagner вы также потеряете текущую историю bash, если создадите новую оболочку
    2017-05-06 12: 45: 56Z
  4. Это хорошее решение, при котором доступ к привилегиям пользователя ограничен.
    2018-10-18 07: 36: 11Z

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

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

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

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

    
15
2016-05-26 22: 24: 02Z
 
. ~/.bashrc
  

. - это встроенная в POSIX встроенная система р>

Альтернативы

 
source ~/.bashrc
  

source является синонимом точки /периода . в bash, но не в POSIX sh, поэтому для максимального совместимость использовать период.

 
exec bash
  
  •  exec команда заменяет оболочку на указанную программу ... - WhoSayIn
  •   
    ДIV>
10
2018-09-14 17: 36: 26Z
  1. exec bash по-прежнему наследует среду текущей оболочки. exec env -i bash будет ближе (или exec env -i bash -l, если вы сейчас находитесь в оболочке входа в систему).
    2017-05-16 20: 42: 47Z

В зависимости от вашей среды, вы можете захотеть добавить сценарии для автоматической загрузки .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.

    
5
2018-10-04 12: 11: 49Z

Для меня то, что работает, когда я меняю PATH: exec "$BASH" --login

    
3
2018-08-08 20: 13: 16Z
  1. Это то, что сработало и для меня, большое спасибо:)
    2018-11-06 16: 45: 30Z
  2. Вопрос о перезагрузке ~/.bashrc, которая --login будет не (напрямую) перезагружаться; на уровне пользователя вместо этого он перезагрузит ~/.bash_profile (или ~/.bash_login или ~/.profile).
    2019-03-24 21: 07: 45Z

Я использовал 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 - это фактически новое имя пользователя, которое вы создали выше, а теперь войдите в систему с помощью)

    
3
2018-11-12 19: 07: 03Z

тип:

source ~/.bashrc

или, в более короткой форме:

. ~/.bashrc

    
2
2019-03-25 12: 35: 12Z
  1. Опять же, работает, только если вы находитесь в домашнем каталоге или, точнее, в каталоге, где находится .bashrc. Как сказано в принятом ответе, более правильный способ сделать это - source ~/.bashrc.
    2016-05-20 17: 12: 08Z

exec bash - отличный способ перезапустить и запустить новую оболочку для замены текущей. просто чтобы добавить к ответу, $SHELL возвращает текущую оболочку bash. Используя следующееg, он перезагрузит текущую оболочку, а не только bash.

exec $SHELL -l;

    
2
2019-06-01 23: 09: 55Z

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

 
. ~/.bashrc

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

 
source ~/.bashrc
    
1
2014-10-02 20: 32: 33Z
  1. Это был принятый ответ в течение 4 лет?
    2014-10-09 13: 29: 16Z
  2. @ jwg принятый ответ. .bashrc. будет работать только если вы находитесь в домашнем каталоге на msysgit.
    2014-10-09 17: 15: 49Z
  3. @ jwg Хорошо, я уже говорил, что вам не нужно печатать 'source ~ /.bashrc', вместо этого используйте более короткую версию.
    2014-10-09 17: 21: 57Z
  4. @ jwg хорошо, я добавил его как правку к исходному ответу:)
    2014-10-09 19: 28: 02Z
  5. Почему избыточный ответ @Sojan?
    2017-08-02 14: 24: 56Z

Это тоже будет работать ..

 
cd ~
source .bashrc
    
1
2015-03-21 19: 16: 52Z
  1. Да, но также изменяет рабочий каталог на ~, что не нужно.
    2014-06-03 15: 37: 36Z
  2. Спасибо за поддержку контекста @Krinkle
    2017-08-03 10: 51: 15Z
  3. Необходимо ли указывать ~, чтобы изменить рабочий каталог на домашний каталог пользователя?
    2018-08-16 13: 55: 00Z

Я заметил, что чистая команда exec bash сохранит переменные среды, поэтому вам нужно использовать exec -c bash для запуска bash в пустой среде.

Например, вы входите в bash, и export A=1, если вы exec bash, A == 1.

Если вы exec -cl bash, то A пуст.

Я думаю, что это лучший способ сделать свою работу.

    
1
2018-05-22 13: 53: 48Z

Предполагая интерактивную оболочку, вы хотите сохранить текущую историю команд, а также загрузить /etc /profile (который загружает данные среды, включая /etc /bashrc, а в Mac OS X загружает пути, определенные в /etc /paths. d /via path_helper), добавьте историю команд и выполните команду bash с параметром входа в систему ('-l'):

 
history -a && exec bash -l
    
1
2018-11-14 01: 04: 56Z

лично у меня есть

alias ..='source ~/.bashrc'

в моем bashrc, так что я могу просто использовать "..", чтобы перезагрузить его.

    
- 2
2018-01-20 03: 49: 20Z
    Многие люди используют .. в качестве псевдонима для cd .., поэтому это будет очень запутанно.
    2018-07-22 21: 05: 30Z
  1. за исключением имени псевдонима, хорошая идея. alias rehash='source ~/.bashrc' мой выбор.
    2018-08-07 07: 53: 27Z
  2. используйте что-то вроде "_rs", для которого я использую в качестве оболочки перезагрузки. я в значительной степени использую _ для начала своих псевдонимов; который похож на js libs underscorejs или lodash.
    2019-06-01 23: 01: 23Z
источник размещен Вот