Как перезагрузить .bash_profile из командной строки?

997

Как я могу перезагрузить .bash_profileиз командной строки ?

Я могу заставить оболочку распознавать изменения .bash_profile, выйдя и войдя обратно, но я бы хотел сделать это по требованию.

markdorison
источник

Ответы:

1883

Просто наберите source ~/.bash_profile

Кроме того, если вам нравится сохранять нажатия клавиш, вы можете набрать . ~/.bash_profile

SiegeX
источник
49
Как насчет того alias BASHRELOAD=". ~/.bash_profile". Если вы делаете это часто, вы можете просто использовать псевдоним как br.
Бобобобо
1
Любая причина, почему я должен делать это каждый раз / сеанс? Я не могу сохранить изменения, внесенные в .bash_profile, даже если они есть в файле, когда я открываю его в редакторе. Смешение.
Эрвинхейзер
3
@erwinheiser Ваша система загружает файл? Некоторые системы используют другие файлы, такие как ~ / .bashrc.
Грэм П Хит
1
Если вы хотите узнать, что с нагрузкой что-то пошло не так, вы можете использовать:alias reload='source ~/.bash_profile && echo "File .bash_profile reloaded correctly" || echo "Syntax error, could not import the file"';
Cristian Batista
1
Для людей, которые забыли, что вы перешли на OhMyZsh. запустите ~ / .zshrc и внесите туда изменения вместо вашего .bash_profile
Sankofa
106
. ~/.bash_profile

Просто убедитесь, что у вас нет никаких зависимостей от текущего состояния.

Карл Норум
источник
15
Почему это работает? Т.е. какая .команда в этом случае?
Иона
9
Оператор точки:. это просто псевдоним sourceкоманды.
Грэм П Хит
8
@GrahamPHeath - строго говоря, я думаю, что все наоборот; .старше sourceIS.
Карл Норум
4
sourceявляется специфической реализацией bash.
Thirupathi Thangavel
7
@StasS - .и sourceбуквально то же самое в bash. По ссылке: « sourceэто синоним точки / периода» .в bash, но не в POSIX sh, поэтому для максимальной совместимости используйте точку ».
Карл Норум
31

Просто введите:

. ~/.bash_profile

Однако, если вы хотите, чтобы исходный код запускался автоматически при запуске терминала, а не каждый раз, когда вы открываете терминал, вы можете добавить его . ~/.bash_profileв ~/.bashrcфайл.

Замечания:

Когда вы открываете терминал, терминал запускает bash в интерактивном режиме (не входящем в систему), что означает, что он будет источником ~/.bashrc.

~/.bash_profileПолучается только от bash при запуске в режиме интерактивного входа . Обычно это происходит только при входе в консоль ( Ctrl+ Alt+ F1.. F6) или при подключении через ssh.

Мухаммед Анини
источник
15

Вы также можете использовать эту команду для перезагрузки ~ / .bash_profile для этого пользователя. Обязательно используйте тире.

su - username
Джайпал Сингх
источник
6
Это вызовет всю оболочку внутри оболочки, далекую от идеальной. Другие параметры просто повторно выполняют соответствующий файл, означая, что они (A) действительно имеют отношение к заданному вопросу и (B) не накапливают оболочки и, возможно, перезагружают другие вещи, которые не должны быть (env vars и т. Д.). Там являются надлежащими способами , чтобы заменить текущую оболочку напрямую (без вложенности), но так как это не по теме, я оставлю заинтересованные читатель искать в другом месте.
underscore_d
3
вы открываете другую оболочку, это не перезагрузка, вы также можете открыть новый терминал или перезаписать
Хуан Диего
15

Мне нравится тот факт, что после того, как вы только что отредактировали файл, все, что вам нужно сделать, это набрать:

. !$

Это источник файла, который вы только что отредактировали в истории. Посмотрите, что такое взрыв доллара в bash .

hyper_st8
источник
11
  1. Сохраните файл .bash_profile
  2. Перейдите в домашний каталог пользователя, набрав cd
  3. Перезагрузить профиль с . .bash_profile
Митхун Хатри
источник
8
Просто иди домой с cd. Нет необходимости ~.
roNn23
8
Не нужно cd- вы можете просто перезагрузить его из каталога, в котором вы сейчас находитесь:. ~/.bash_profile
Alex Villa
10

Если вы не против потерять историю вашего текущего терминала оболочки, вы также можете сделать

bash -l

Это раскроет вашу оболочку и откроет еще один дочерний процесс bash. -lПараметр говорит Баш для работы в качестве оболочки, это необходимо потому , что .bash_profile не будет работать , как нерегистрированная оболочка, для получения дополнительной информации об этом читайте здесь

Если вы хотите полностью заменить текущую оболочку, вы также можете сделать:

exec bash -l

Вышеприведенное не будет разветвлять вашу текущую оболочку, но полностью ее заменит, поэтому при вводе exitона полностью прекратит работу, а не перенесет вас в предыдущую оболочку.

Ulukai
источник
вы не потеряете свою историю, если будете использовать iterm2
Xitcod13
4

Добавьте alias bashs="source ~/.bash_profile"в ваш файл bash. Так что вы можете позвонить в bashsследующий раз

Шимер М Али
источник
1
Я псевдоним, что reset- легче запомнить
jcollum
3

Если файл .bash_profile не существует, вы можете попробовать выполнить следующую команду:

. ~/.bashrc 

или

 source ~/.bashrc

вместо .bash_profile. Вы можете найти больше информации о bashrc

Иезекииль де Симоне
источник
3

Я хотел бы опубликовать быстрый ответ, который, хотя использование source ~/.bash_profileили ответы, упомянутые выше, работают, стоит упомянуть, что это только перезагружает ваш профиль bash в текущей вкладке или сеансе, который вы просматриваете. Если вы хотите перезагрузить свой профиль bash на каждой вкладке / оболочке, вам нужно вручную ввести эту команду в каждую из них.

Если вы используете iTerm, вы можете использовать CMD⌘+ Shift+, Iчтобы ввести команду во все текущие вкладки . Для терминала может быть полезно обратиться к этой проблеме ;

август
источник
2

Я использую Debian, и я могу просто напечатать, exec bashчтобы достичь этого. Я не могу сказать, будет ли это работать на всех других дистрибутивах.

Cassandra
источник
2
Это не будет работать в Mac (по крайней мере, не в той версии, которую я использую - Sierra), потому что простое выполнение запускает оболочку без входа в систему, которая не запускает .bash_profile
Ulukai
@Ulukai, очевидно, просто печатает, . .bash_profileнаходясь в вашем домашнем каталоге на Mac, и сделает эту работу. То же, что и ответ, приведенный выше 7urkm3n.
Кассандра
2
alias reload!=". ~/.bash_profile"

или если хотите добавить логи через функции

function reload! () {
    echo "Reloading bash profile...!"
    source ~/.bash_profile
    echo "Reloaded!!!"
}
7urkm3n
источник
Нет, это по твоим предпочтениям. Если хотите добавить дополнительные строки печати , показывающие статус и не просто пойти просто . ~/. bash_profile ниsource ~/.bash_profile
7urkm3n
1

Я использую Sierra и некоторое время работал над этим (пробовал все рекомендуемые решения). Я запутался, поэтому в конце концов попытался перезагрузить компьютер! Это сработало

я пришел к выводу, что иногда необходим жесткий сброс

Фьорды номер один фанат
источник
1
Майк да, полный сброс будет работать, потому что все загружается заново. Если внесенные вами изменения действительны, они вступят в силу при следующей загрузке. Однако вам будет легче немного покопаться, чтобы найти команду / метод, чтобы просто обновить bash без необходимости делать это все время. Будет способ достичь этого без перезагрузки, что, конечно, потребует слишком много времени, чтобы посмотреть, сработают ли последние изменения! Возможно, взгляните на osxdaily.com/2016/06/07/…
Кассандра
1
да, я попытался использовать как сокращенную, так и полную команду для перезагрузки профиля / пути bash. это не сработало, только вышел из системы и снова работал. странно
фанат Бьоркса номер один