it-swarm-ru.tech

Что такое файл .bashrc?

Оболочки Unix при запуске читают файл .bashrc и выполняют записанные в нем команды. Что это за файл и что он выполняет?

97
pineapple

На самом деле, это именно bash, которая читает .bashrc/etc/bash.bashrc). Есть много разных оболочек.

Справочная страница bash (Brian Fox и Chet Ramey; также информационная страница "Файлы запуска Bash" ) является официальной ссылкой:

Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, bash читает и выполняет команды из ~/.bashrc, если этот файл существует. Это может быть запрещено с помощью опции --norc. Параметр --rcfile file заставит bash читать и выполнять команды из файла вместо ~/.bashrc.

Когда bash запускается неинтерактивно, например, для запуска сценария Shell он ищет переменную BASH_ENV в среде, расширяет ее значение, если оно там появляется, и использует расширенное значение в качестве имени файла для чтения и выполнения. , Bash ведет себя так, как будто была выполнена следующая команда:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi  

но значение переменной PATH не используется для поиска имени файла.

Файл просто командная оболочка. Обычно он используется для изменения приглашений, установки переменных среды и определения процедур оболочки. Традиционно для этой цели используется файл .profile, но bash имеет так много расширений, что ему нужен собственный файл запуска для пользователей, которые хотят поместить bashisms в файлы запуска.

" Не логин Shell " означает такие вещи, как запуск скриптов и, как правило, окон терминала, запускаемых оконными менеджерами. Иногда я настраиваю системы * nix так, чтобы .bashrc и BASH_ENV были просто исходным кодом .profile. Пока вы не отклоняетесь от команд оболочки POSIX, вы получите такую ​​же инициализацию в любой оболочке.

Это особенно ценно, когда sh действительно bash, что иногда случается. Для этого используйте:

. .profile

Одна из причин, по которой все это настолько сложно, заключается в том, что иногда люди помещают вещи, которые производят вывод, в файлы запуска Shell, или они безоговорочно задают приглашения. Это вызывает много проблем при запуске программ Shell и команд backtick на языках, не говоря уже о system(3) из программ на Си. Я думаю, что способ запуска bash разработан таким образом, чтобы иметь один файл, в котором выходные данные и параметры приглашения были в порядке, и один файл, в котором это не так. Традиционно, чтобы различить интерактивность, выполнялся бы тест во время выполнения, например, проверка, установлен ли запрос.

64
DigitalRoss

Когда Bash запускается, он выполняет команды в различных сценариях.

Когда Bash вызывается как интерактивная оболочка входа в систему, он сначала читает и выполняет команды из файла/etc/profile, если этот файл существует. После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в указанном порядке, а также читает и выполняет команды из первой, которая существует и доступна для чтения.

Когда оболочка входа в систему закрывается, Bash читает и выполняет команды из файла ~/.bash_logout, если он существует.

Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, Bash читает и выполняет команды из ~/.bashrc, если этот файл существует. Это может быть запрещено с помощью параметра --norc. Опция --rcfile file заставит Bash читать и выполнять команды из файла вместо ~/.bashrc.

http://en.wikipedia.org/wiki/Bash_(Unix_Shell)

Вот несколько хитростей и советов:

http://www.cyberciti.biz/tips/howto-linux-unix-bash-Shell-setup-Prompt.html

Давайте попробуем настроить запрос так, чтобы он отображал сегодняшнюю дату и имя хоста:

PS1="\d \h $ "
12
randomx

Он должен содержать различные команды «инициализации» для вашей оболочки, например:

  • Создание полезных псевдонимов (например, alias ll='ls -l').
  • Добавление большего количества каталогов в PATH.
  • Установка новых переменных среды.
10
Roman Zeyde