1

У меня Windows 7 64-битный ПК. Я установил Cygwin версии 2.6.0 на него в каталоге c:\cygwin64.

Я запутался, что когда я открываю терминал Cygwin64, запускается ли файл конфигурации /etc/bash.bashrc ?

Я думаю, что это интерактивная оболочка для входа в систему, поэтому, насколько я понимаю, /etc/bash.bashrc никогда не запускается. Вот ссылка моего понимания: https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/

Но в файле /etc/bash.bashrc я вижу переменную среды PS1 . И это то же значение, которое я получаю, когда использую команду echo $PS1 . Значит ли это, что /etc/bash.bashrc запускался?

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

Спасибо

3 ответа3

1

Когда я открываю терминал Cygwin64, запускается ли /etc/bash.bashrc ?

Короткий ответ:

Да. Я добавил несколько операторов echo в файлы запуска bash и открыл терминал Cywin64. Вот вывод:

/etc/bash.bashrc
/home/DavidPostill/.bash_profile
.profile
/home/DavidPostill/.bashrc
/home/DavidPostill/.bashrc
$

По какой-то причине ~/.bashrc вызывается дважды, на данный момент я не уверен почему.


Длинный ответ:

Ярлык для терминала Cygwin64 запускает следующую команду:

C:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico -

Помощь для mintty штатов:

$ mintty --help
Usage: mintty [OPTION]... [ PROGRAM [ARG]... | - ]

Start a new terminal session running the specified program or the user's shell.
If a dash is given instead of a program, invoke the shell as a login shell.

Таким образом , мы можем увидеть буксировку - на ярлык команда вызывает оболочку входа в систему для запуска.

Что будет дальше, зависит от того, на что настроена ваша оболочка входа.

Предполагая, что он настроен на bash тогда:

  • Если это оболочка входа в систему, Cygwin выполнит ~/.bash_profile если он существует, или иным образом ~/.profile .

    Обратите внимание, что .bash_profile будет выполнять ~/.profile

  • Если это интерактивная оболочка, Cygwin выполнит ~/.bashrc

.profile (другие имена также действительны, см. справочную страницу bash) содержит команды bash. Это выполняется, когда bash запускается как оболочка входа в систему, например, из команды bash --login. Это полезное место для определения и экспорта переменных среды и функций bash, которые будут использоваться bash и программами, вызываемыми bash. Это хорошее место для переопределения PATH, если это необходимо. Мы рекомендуем добавить ":." до конца PATH также искать текущий рабочий каталог (в отличие от DOS, локальный каталог не ищется по умолчанию). Также, чтобы избежать задержек, вы должны либо сбросить MAILCHECK, либо определить MAILPATH, чтобы он указывал на ваш существующий почтовый ящик.

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

Настройка источника bash

0

Когда вы открываете терминал cygwin, это всегда "интерактивный вход". Смотрите c:\cygwin\cygwin.bat который содержит bash --login -i .

Согласно руководству bash :

«Если присутствует опция -i, оболочка является интерактивной».

и "--login" это

Msgstr "Сделать так, чтобы bash действовал как оболочка входа в систему".

Что вы спрашиваете о /etc/bash.bashrc - это системный файл инициализации bashrc который может быть переопределен локальным ~/.bashrc или применен в случае, если в каталоге пользователей нет ~/.bashrc . Когда вы уже находитесь в терминале Cygwin и попытаетесь запустить bash - это не вход в систему, поскольку вы уже вошли в систему, но это интерактивный сеанс, потому что вы вызвали bash не из скрипта. Если вы будете называть bash из скрипта как

#!/bin/bash

echo "Hello SuperUser"

тогда это не интерактивный и не входящий в систему вызов. Таким образом, bash вообще не будет читать bashrc .

Прочтите раздел "Вызов" в официальном руководстве по bash, чтобы лучше понять, как bash интерпретирует ~/.bash_profile , ~/.bash_login , ~/.profile , /etc/bash.bashrc , ~/.bashrc и порядок его использования.

0

Этот ответ довольно хорошо объясняет разницу между входом в систему и отсутствием входа. Подводя итог, под Cygwin вы уже вошли в систему и просто открываете новое окно терминала. Это так же, как если бы вы открывали эмулятор терминала на рабочем столе Linux или использовали screen .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .