Вопрос

Я использовал несколько разных * nix-систем за эти годы, и кажется, что каждый вариант Bash, который я использую, имеет свой алгоритм для определения, какие сценарии запуска следует запускать. Для таких задач, как настройка переменных среды и псевдонимов и печать сообщений запуска (например, MOTD), какой сценарий запуска является подходящим местом для этого?

В чем разница между помещением вещей в .bashrc , .bash_profile и .environment ? Я также видел другие файлы, такие как .login , .bash_login и .profile ; они когда-либо актуальны? В чем различия, которые запускаются при физическом входе в систему, удаленном входе через ssh и открытии нового окна терминала? Есть ли существенные различия между платформами (включая Mac OS X (и его Terminal.app) и Cygwin Bash)?

Это было полезно?

Решение

Основное отличие от конфигурационных файлов оболочки заключается в том, что некоторые из них читаются только по имени входа в систему оболочки (например, когда вы входите в систему с другого хоста или входите в текстовую консоль локального компьютера с Unix). они называются, скажем, .login или .profile или .zlogin (в зависимости от того, какую оболочку вы используете).

Затем у вас есть файлы конфигурации, которые читаются " интерактивными " оболочки (как, например, те, которые подключены к терминалу (или псевдотерминалу в случае, скажем, эмулятора терминала, работающего под управлением оконной системы). Это те, с именами, такими как .bashrc , < code> .tcshrc , .zshrc и т. д.

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

[[-r ~ / .bashrc]] & amp; & amp; , ~ / .Bashrc

Другие оболочки ведут себя по-разному - например, с помощью zsh , .zshrc всегда читается для интерактивной оболочки, независимо от того, логин она или нет.

Страница руководства для bash объясняет обстоятельства, при которых каждый файл читается. Да, в целом поведение между машинами одинаковое.

.profile - это просто имя файла сценария входа, которое изначально использовалось / bin / sh . bash , как правило, обратно совместимый с / bin / sh , будет читать .profile , если он существует.

Другие советы

Это просто. Это объясняется в man bash :

/bin/bash
       The bash executable
/etc/profile
       The systemwide initialization file, executed for login shells
~/.bash_profile
       The personal initialization file, executed for login shells
~/.bashrc
       The individual per-interactive-shell startup file
~/.bash_logout
       The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
       Individual readline initialization file

Оболочки входа в систему - это те, которые читаются при входе в систему (например, они не выполняются при простом запуске xterm, например). Есть и другие способы авторизации. Например, используя менеджер отображения X. У них есть другие способы чтения и экспорта переменных среды во время входа в систему.

Также прочитайте главу INVOCATION в руководстве. В нем говорится " В следующих параграфах описывается, как bash выполняет свои файлы запуска. & Quot; , я думаю, что это точечный шаг :) В нем объясняется, что такое " интерактивный " оболочка тоже.

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

Классически, ~ / .profile используется Bourne Shell и, вероятно, поддерживается Bash как устаревшая мера. Опять же, ~ / .login и ~ / .cshrc использовались C Shell - я не уверен, что Bash использует их вообще.

~ / .bash_profile будет использоваться один раз при входе в систему. Сценарий ~ / .bashrc читается при каждом запуске оболочки. Это аналогично /. Cshrc для оболочки C.

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

Я считаю, что файл ~ / .environment является файлом совместимости для Korn Shell.

Я нашел информацию о .bashrc и .bash_profile здесь Подводя итог:

  

.bash_profile выполняется, когда вы   авторизоваться. Вещи, которые вы положили туда, могут быть   ваш путь и другие важные   переменные окружения.

     

.bashrc используется для не входящих в систему оболочек.   Я не уверен, что это значит. я знаю   что RedHat   выполняет его каждый раз, когда вы начинаете   другая оболочка (su для этого пользователя или   просто снова звоню bash)   хочу поставить псевдонимы там, но снова   Я не уверен, что это значит. я   просто игнорируй это сам.

     

.profile является эквивалентом   .bash_profile для рута. Я думаю   имя изменено, чтобы позволить другим   Оболочки (csh, sh, tcsh) также используют его.   (он вам не нужен)

     

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

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

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

Согласно Джошу Стейгеру , Mac OS X Terminal.app на самом деле по умолчанию запускает оболочку входа в систему, а не не входящую в систему, для каждого нового окна терминала, вызывая .bash_profile вместо .bashrc.

Он рекомендует:

  

Большую часть времени вы не хотите поддерживать два отдельных файла конфигурации   для входных и не входящих в систему оболочек & # 8212; когда вы устанавливаете PATH, вы хотите, чтобы он   применимо к обоим. Вы можете это исправить, поставив .bashrc из вашего   Файл .bash_profile, затем помещает PATH и общие настройки в .bashrc.

     

Для этого добавьте следующие строки в .bash_profile:

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi
     

Теперь, когда вы входите в свой   машина из консоли .bashrc будет вызываться.

Хорошее место для просмотра - справочная страница bash. Здесь - онлайн-версия. Ищите «ПРИЗНАНИЕ» раздел.

Я использовал дистрибутивы семейства Debian, которые, по-видимому, исполняют .profile , но не .bash_profile , тогда как производные RHEL выполняют .bash_profile перед .profile .

Кажется, что это беспорядок, когда приходится настраивать переменные среды для работы в любой ОС Linux.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top