К дополняют и противопоставляют два самых популярных ответа: . ~/.bashrc
и exec bash
:
Оба решения эффективно перезагрузка ~/.bashrc
, но есть различия:
. ~/.bashrc
или source ~/.bashrc
будет сохранить вашу текущую оболочку :
- За исключением изменений, которые производит перезагрузка
~/.bashrc
в текущую оболочку ( sourcing ), текущая оболочка и ее состояние сохраняются , который включает переменные среды, переменные оболочки, параметры оболочки, функции оболочки и историю команд.
exec bash
или, более надежно, exec "$BASH"
[1] ,
заменит вашу текущую оболочку новым экземпляром, и поэтому только сохранит переменные среды вашей текущей оболочки ( включая те, которые вы определили ad-hoc).
- Другими словами: любые временные изменения в текущей оболочке с точки зрения переменных оболочки, функций оболочки, параметров оболочки, истории команд теряются.
В зависимости от ваших потребностей, тот или иной подход может быть предпочтительным.
[1] exec bash
теоретически может выполнить исполняемый файл , отличный от bash
, чем тот, который запустил текущую оболочку, если он существует в каталоге, указанном ранее в $PATH
. Поскольку специальная переменная $BASH
всегда содержит полный путь к исполняемому файлу, который запустил текущую оболочку, exec "$BASH"
гарантированно использует такой же исполняемый файл.
Примечание re "..."
вокруг $BASH
: двойные кавычки гарантируют, что значение переменной используется как есть, без интерпретации Bash; если значение не имеет встроенных пробелов или других метасимволов оболочки (что маловероятно в данном случае), вам не нужны двойные кавычки, но их использование - хорошая привычка для формирования.