Якщо я вніс зміни .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 privledges) та увійти в систему як це ім’я користувача.
Це створить каталог для ваших налаштувань, включаючи файли .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. Використовуючи наступне, він перезавантажить поточну оболонку, а не лише баш.
exec $SHELL -l;
Для мене те, що працює, коли я змінюю PATH: exec "$BASH" --login
~/.bashrc, яке не--login буде (безпосередньо) перезавантажуватися; на рівні користувача він замість цього перезавантажить (або або ). ~/.bash_profile~/.bash_login~/.profile
тип:
source ~/.bashrc
або, у скороченому вигляді:
. ~/.bashrc
.bashrcзнаходиться. Більш правильний спосіб зробити це, як сказано в прийнятій відповіді, - це source ~/.bashrc.
Я використовую наступну команду на msysgit
. ~/.bashrc
скорочена версія
source ~/.bashrc
Припускаючи інтерактивну оболонку, і ви хочете зберегти свою поточну історію команд, а також завантажити / etc / profile (який завантажує дані про середовище, включаючи / etc / bashrc, і на Mac OS X завантажує шляхи, визначені в /etc/paths.d/ via path_helper), додайте історію команд і виконайте exec bash з параметром login ('-l'):
history -a && exec 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'мій вибір.
export PATH=$PATH:fooа потім ви зміните його наexport PATH=$PATH:bar. Якщо ви ввійдете в систему та вийдете назад,barбуде лише PATH, але якщо ви зробите те, що пропонуєте, обидваfooіbarбудуть у PATH. Ви знаєте спосіб цього?