2009-09-30 15:54:44 +0000 2009-09-30 15:54:44 +0000
106
106
Advertisement

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

Advertisement

Unix-оболочки, когда начинают читать .bashrc-файл и выполнять команды, написанные в нем. Что это за файл и что он выполняет?

Advertisement

Ответы (3)

69
69
69
2009-09-30 15:57:31 +0000

На самом деле, именно 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 спроектирован так, чтобы иметь один файл, где выходные данные и подсказки будут в порядке, и один файл, где их нет. Традиционно, тест на выполнение выполняется для разграничения интерактивности, например, проверка того, установлена ли подсказка.

12
12
12
2009-09-30 15:56:30 +0000

Когда 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 $ "
```.
10
Advertisement
10
10
2009-09-30 15:56:46 +0000

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

  • Создание полезных псевдонимов (например, alias ll='ls -l').
  • Добавление новых каталогов в PATH.
  • Установка новых переменных окружения.
Advertisement