What is the purpose of .bashrc and how does it work?
I found the .bashrc file and I want to know the purpose/function of it. Also how and when is it used?
@PeDro that will start a new shell, initialize it with the settings in that bashrc, and then immediately quit that new shell and return to your old one. It will help you detect errors, but you won’t actually get those settings applied. For that you should use source ~/.bashrc : that will load the settings in your current shell.
3 Answers 3
.bashrc is a Bash shell script that Bash runs whenever it is started interactively. It initializes an interactive shell session. You can put any command in that file that you could type at the command prompt.
You put commands here to set up the shell for use in your particular environment, or to customize things to your preferences. A common thing to put in .bashrc are aliases that you want to always be available.
.bashrc runs on every interactive shell launch. If you say:
and then hit Ctrl-D three times, .bashrc will run three times. But if you say this instead:
$ bash -c exit ; bash -c exit ; bash -c exit
then .bashrc won’t run at all, since -c makes the Bash call non-interactive. The same is true when you run a shell script from a file.
Contrast .bash_profile and .profile which are only run at the start of a new login shell. ( bash -l ) You choose whether a command goes in .bashrc vs .bash_profile depending on whether you want it to run once or for every interactive shell start.
As a counterexample to aliases, which I prefer to put in .bashrc , you want to do PATH adjustments in .bash_profile instead, since these changes are typically not idempotent:
export PATH="$PATH:/some/addition"
If you put that in .bashrc instead, every time you launched an interactive sub-shell, :/some/addition would get tacked onto the end of the PATH again, creating extra work for the shell when you mistype a command.
You get a new interactive Bash shell whenever you shell out of vi with :sh , for example.
Minor quibble: unlike most other shells, bash does not automatically load the per-instance config file .bashrc when it’s started as a login shell. This can sometimes lead to unexpected behavior. The usual workaround is to source .bashrc from .profile or .bash_profile instead.
@IlmariKaronen Since .bashrc isn’t intended for use by other shells, it’s better not to source it from .profile (which might be used by other non- bash shells).
@chepner That’s why most distros do a check in .profile by default where they check if the shell has BASH_VERSION before sourcing .bashrc.
@oligofren I don’t consider that a solution to rely on, since the default is assuming I am using bash and not some other shell that might be using .profile .
@Anil: The kind you get on logging in, as distinct from the kind you get when running a shell script. The term is right there in the manual.
The purpose of a .bashrc file is to provide a place where you can set up variables, functions and aliases, define your (PS1) prompt and define other settings that you want to use every time you open a new terminal window.
It works by being run each time you open up a new terminal, window or pane.
A super minimal one might have the following:
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"
That’s all you really know to get started
Here’s the «overkill» version, useful for experienced developers:
An experienced developer will often have a lot more.
You can see mine here (pic with syntax highlighting):
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_\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 && . $_ [ $ -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"
Что делает файл .bashrc в Linux
Файл .bashrc — это файл скрипта, который выполняется при входе пользователя в систему. Сам файл содержит ряд настроек для сессии терминала: цвета, автозаполнение, историю командной оболочки, псевдонимы команд и т. д.
Это скрытый файл , и простая команда ls не покажет его.
С помощью следующей команды можно посмотреть скрытые файлы:
В первом столбце можно увидеть файл .bashrc. Содержимое .bashrc можно изменить, чтобы настроить функции, псевдонимы команд и параметры bash.
Файл .bashrc содержит ряд комментариев, которые упрощают его понимание.
Для просмотра файла bashrc введите:
Ниже приведено несколько примеров редактирования .bashrc.
Определение функций в .bashrc
С помощью bashrc можно легко определять функции. Эти функции могут быть набором основных команд и даже могут использовать аргументы из терминала.
Давайте определим функцию, которая сообщает дату в более развернутой форме.
Сначала нужно открыть файл .bashrc в режиме редактирования.
На скрине выше показано, как будет выглядеть терминал. Чтобы начать редактирование, нажмите любую букву на клавиатуре. В конце файла поместите следующий код:
today() echo This is a `date +"%A %d in %B of %Y (%r)"` return >
Нажмите esc. Затем для выхода из vi нажмите двоеточие(:), wq и enter.
Изменения будут сохранены. Чтобы применить изменения в bash, выйдите и перезапустите терминал.
Или примените изменения с помощью следующей команды:
Чтобы запустить только что созданную функцию, нужно вызвать today:
Теперь создадим еще одну функцию. Она объединит процесс создания каталога и входа в этот каталог.
mkcd () mkdir -p -- "$1" && cd -P -- "$1" >
Этот код объединяет две отдельные команды:
$1 представляет собой передаваемый вместе с вызовом функции первый параметр.
Для использования этой функции введите:
где “directory_name” – параметр, определяющий имя каталога.
Сначала эта функция с помощью mkdir создаст каталог по имени directory_name, а затем перейдет в него.
Определение псевдонимов в .bashrc
Псевдонимы — это разные имена одной и той же команды. Их можно воспринимать как ярлыки для более длинной команды. В файле .bashrc уже есть набор предопределенных псевдонимов.
Если у вас есть псевдоним, который вы используете регулярно, то вместо того, чтобы определять его каждый раз при открытии терминала, можно сохранить его в файле .bashrc.
Например, заменим команду whoami следующей строкой кода.
Не забудьте сохранить изменения, а затем запустите:
Теперь вы можете вводить команду wmi, и терминал будет запускать ее как whoami.
Обычно псевдонимы можно определить, добавив оператор:
Отметим, что между “aliasname”, “=” и “commands” не должно быть пробела .
Также псевдонимы можно использовать для хранения длинных путей к каталогам.
Пользовательская настройка терминала
Есть много способов настроить терминал с помощью файла bashrc.
Чтобы изменить текст, который выводится в командной строке, добавьте следующую строку в конец файла:
Сохраните изменения и запустите:
После обновления файла bashrc с помощью команды source командная строка bash изменится, как показано на скрине ниже.
Также можно изменить лимит истории команд, которая отображается при нажатии стрелки вверх. Для этого измените переменные HISTSIZE и HISTFILESIZE в файле bashrc.
- HISTSIZE — это количество команд в памяти при работе bash.
- HISTFILESIZE — это количество команд на диске.
Подводим итоги
Изменения в файле bashrc выглядят следующим образом:
Последовательность команд можно поместить в .bashrc под функцией. Это сэкономит много времени и сил. При редактировании файла .bashrc нужно быть осторожным и всегда делать резервную копию, прежде чем вносить какие-либо