Каково назначение .bashrc и как он работает?

Каково назначение .bashrc и как он работает?

Я нашел .bashrcфайл и хочу узнать его назначение/функцию. А также как и когда он используется?

решение1

.bashrcэто Башскрипт оболочкичто Bash запускается всякий раз, когда он запускается интерактивно. Он инициализирует сеанс интерактивной оболочки. Вы можете поместить в этот файл любую команду, которую вы могли бы ввести в командной строке.

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

.bashrcработает накаждыйинтерактивный запуск оболочки. Если вы скажете:

$ bash ; bash ; bash

и затем ударил Ctrl-Dтри раза, .bashrcбудет бежать три раза. Но если вы скажете это вместо этого:

$ bash -c exit ; bash -c exit ; bash -c exit

то .bashrcвообще не запустится, так как -cделает вызов Bash неинтерактивным. То же самое происходит, когда вы запускаете скрипт оболочки из файла.

Контраст .bash_profileи .profileкоторые запускаются только при запуске новой оболочки входа в систему. ( bash -l) Вы выбираете, будет ли команда запускаться .bashrcvs .bash_profileв зависимости от того, хотите ли вы, чтобы она запускалась один раз или при каждом запуске интерактивной оболочки.

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

export PATH="$PATH:/some/addition"

Если вы поставите его .bashrcвместо этого, каждый раз при запуске интерактивной подоболочки он :/some/additionбудет добавляться в конец again PATH, создавая дополнительную работу для оболочки, если вы неправильно наберете команду.

Вы получаете новую интерактивную оболочку Bash всякий раз, когда выоболочка изviс :sh, например.

решение2

Цель файла .bashrc— предоставить место, где вы можете настроить переменные, функции и псевдонимы, определить приглашение (PS1) и другие параметры, которые вы хотите использовать каждый раз при открытии нового окна терминала.

Он запускается каждый раз, когда вы открываете новый терминал, окно или панель.

Суперминимальный вариант может иметь следующее:

export CLICOLOR=1
export LANG="en_US.UTF-8"
alias cp="cp -i"
alias ls="ls --color=auto"
export PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "
export EDITOR="vim"

Это все, что вам нужно знать, чтобы начать.


Вот «расширенная» версия, полезная для опытных разработчиков:

Опытный разработчик часто будет иметь гораздо больше.
Вы можете увидеть мои здесь(картинка с подсветкой синтаксиса):

HISTCONTROL=ignoreboth:erasedups HISTSIZE=100000 HISTFILESIZE=200000
ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
md () { [ $# = 1 ] && mkdir -p "$@" && cd "$@" || echo "Error - no directory passed!"; }
git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; }
HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[\033[01;36m\]>'
set -o vi # vi at command line
export EDITOR=vim
test -f ~/.bash_aliases && . $_
test -f ~/.git-completion.bash && . $_
test -s ~/.autojump/etc/profile.d/autojump && . $_
[ ${BASH_VERSINFO[0]} -ge 4 ] && shopt -s autocd
[ -f /etc/bash_completion ] && ! shopt -oq posix && . /etc/bash_completion
[ -z $TMUX ] && export TERM=xterm-256color && exec tmux
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$home/.rvm/scripts/rvm"

Объяснение:

-1. Настроить мой файл истории так, чтобы он игнорировал дубликаты и был намного больше, чем по умолчанию.
-2. Цветовая опция в lsзависимости от того, используете ли вы Linux или OSX
. -3. Функция " md" для создания и перехода в каталог одной командой
. -4. Найти текущую ветку git, если она находится в репозитории git, и...
-5. -9. Определить потрясающее приглашение PS1, как в <code>20:00:43 durrantm Castle2012 /hom/durrantm/Dropnot/_/rails_apps/linker master \n $ _</code>
-10. Улучшенное приглашение PS2.
-11. Установить vi в качестве редактора в командной строке.
-12. Установить vi в качестве редактора по умолчанию.
-13. Выполнить мой .bash_aliasesфайл, если он существует.
-14. Выполнить мой скрипт автодополнения git (для удаленных и веток), если он существует.
-15. Выполнить автопереход, если он существует.
-16. Разрешить cd без ввода части cd, если версия bash >= 4.
-17. Выполнить скрипт автодополнения bash, если он существует.
-18. Использовать TMUX, если он присутствует
. -19. Добавить rvm в мой PATH.
-20. Используйте rvm, если он существует.

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

Это также упрощает немедленное использование всего файла на новом компьютере, не сталкиваясь с проблемами, связанными с открытием нового окна терминала.

НАПОМИНАНИЕ - если вы меняете свой .bashrc, обязательно запустите новое окно терминала, чтобы убедиться, что он работает ПЕРЕД перезагрузкой (лучше всего сделать это сразу после изменения). Если вы когда-нибудь испортите свой .bashrc и перезагрузитесь, ВЫ МОЖЕТЕ НЕ СМОЖЕТЕ ВОЙТИ В СИСТЕМУ! Лично я также создаю второго пользователя 'admin' на личных машинах, чтобы в такой чрезвычайной ситуации (сломанный вход) я мог войти в него и использовать, а затем использовать sudo для исправления моего другого файла входа .bashrc.

решение3

Это bashфайл конфигурации.

Интерактивные (не требующие входа) оболочки, тогда конфигурация считывается из этих файлов:

  • $HOME/.bashrc

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

  • /etc/profile(Всегда источник)
  • $HOME/.bash_profile(остальные файлы проверяются по порядку, пока не будет найден один из них, после этого другие не читаются)
  • $HOME/.bash_login
  • $HOME/.profile

Простая иллюстрация того, как/когда они загружаются, представлена ​​на изображении ниже.

Я добавил echoк своему .bashrcи.bash_profile

Интерактивная оболочка против оболочки входа

man bashдля получения дополнительной информации см.

Связанный контент