Что такое .bashrc-файл?
Unix-оболочки, когда начинают читать .bashrc
-файл и выполнять команды, написанные в нем. Что это за файл и что он выполняет?
Unix-оболочки, когда начинают читать .bashrc
-файл и выполнять команды, написанные в нем. Что это за файл и что он выполняет?
На самом деле, именно bash
читает .bashrc
(и /etc/bash.bashrc
). Есть много разных оболочек.
Авторитетная ссылка:
Когда запускается интерактивная оболочка, не являющаяся оболочкой для входа в систему, bash читает и выполняет команды из
~/.bashrc
, если этот файл существует. Это может быть заблокировано с помощью опции--norc
. Опция--rcfile
заставит bash читать и выполнять команды из файла вместо~/.bashrc
.Когда bash запускается неинтерактивно, чтобы запустить скрипт оболочки, например, он ищет переменную
BASH_ENV
в окружении, расширяет ее значение, если она там появляется, и использует расширенное значение в качестве имени файла для чтения и выполнения. Bash ведет себя так, как будто была выполнена следующая команда:if [-n "$BASH_ENV"]; then . "$BASH_ENV"; fi
, но значение переменной
PATH
не используется для поиска имени файла.
Файл - это просто команды оболочки. Обычно он используется для изменения подсказок, установки переменных окружения и определения процедур оболочки. Традиционно, файл .profile
используется для этой цели, но bash
имеет столько расширений, что ему нужен собственный загрузочный файл для пользователей, которые хотят поместить bashisms в загрузочные файлы.
“Not a login shell” означает такие вещи, как запуск скриптов и обычно терминальных окон, запускаемых оконными менеджерами. Иногда я настраиваю *nix системы так, чтобы .bashrc
и BASH_ENV
были только исходниками .profile
. До тех пор, пока вы не выходите за пределы команд POSIX оболочки, вы получите ту же самую инициализацию в любой оболочке.
Это особенно ценно, когда sh
- это действительно bash
, что иногда случается. Для этого используйте:
. .profile
Причина, по которой все это так сложно, заключается в том, что иногда люди помещают вещи, которые производят вывод, в загрузочные файлы оболочки, или они безоговорочно устанавливают подсказки. Это приводит к множеству проблем при запуске программ оболочки и команд обратной связи внутри языков, не говоря уже о system(3)
из программ на C. Я думаю, что способ запуска bash
спроектирован так, чтобы иметь один файл, где выходные данные и подсказки будут в порядке, и один файл, где их нет. Традиционно, тест на выполнение выполняется для разграничения интерактивности, например, проверка того, установлена ли подсказка.
Когда Bash запускается, он выполняет команды в различных скриптах.
Когда Bash вызывается в качестве интерактивной оболочки для входа в систему, он сначала читает и выполняет команды из файла /etc/profile, если этот файл существует. После чтения этого файла он ищет ~/.bash_profile, ~/.bash_login, и ~/.profile, в этом порядке, и читает и выполняет команды из первого существующего и доступного для чтения файла.
При выходе из оболочки для входа Bash читает и выполняет команды из файла ~/.bash_logout, если он существует.
При запуске интерактивной оболочки, не являющейся оболочкой для входа в систему, Bash читает и выполняет команды из ~/.bashrc, если он существует. Это может быть заблокировано с помощью опции –norc. Опция файла –rc заставляет Bash читать и выполнять команды из файла вместо ~/.bashrc. _COPY9_(Unix_shell)
Вот несколько подсказок и советов: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html
Попробуем установить подсказку так, чтобы она отображала сегодняшнюю дату и имя хоста:
PS1="\d \h $ "
```.
Она должна содержать различные команды “инициализации” для вашей оболочки, например:
alias ll='ls -l'
).