Якщо я вніс зміни .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. Ви знаєте спосіб цього?