Cygwin .bashrc не является источником, потому что Cygwin запускается в Windows home

9

ПРИМЕЧАНИЕ. Пожалуйста, ознакомьтесь с моим вторым редактированием ниже для получения обновленной информации о проблеме.

Cygwin работал хорошо для меня до прошлой недели. Теперь .bashrc не получает источник. Я, должно быть, установил что-то или изменил что-то, но я не могу точно вспомнить, что вызвало проблему. Когда я запускаю Cygwin, я нахожусь в моем доме Windows, и ни один из моих псевдонимов не работает. Я должен вручную источник .bashrc. Вот мой Cygwin.bat:

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

Любые идеи?

РЕДАКТИРОВАТЬ: мой .bash_profile содержит следующее,

# source the users bashrc if it exists
if [ -f "${HOME}/.bashrc" ] ; then
  source "${HOME}/.bashrc"
fi

EDIT2: ВАЖНО! Когда я запускал Cygwin, он запускался в моей домашней папке Windows. Я попытался поместить мои .bash_profile и .bashrc в эту папку, и они были получены правильно! Это означает, что проблема сводится к выяснению, почему Cygwin запускается в домашней папке Windows, а не в обычной домашней папке Cygwin.

РЕДАКТИРОВАТЬ 3: Результаты выполнения grep Gulshan / etc / passwd /

$ grep Gulshan /etc/passwd
Administrator:unused:500:513:U-Gulshan-HP\Administrator,S-1-5-21-1235613160-4193452482-2032876723-500:/home/Administrator:/bin/bash
Guest:unused:501:513:U-Gulshan-HP\Guest,S-1-5-21-1235613160-4193452482-2032876723-501:/home/Guest:/bin/bash
Gulshan:unused:1000:513:U-Gulshan-HP\Gulshan,S-1-5-21-1235613160-4193452482-2032876723-1000:/home/Gulshan:/bin/bash
gsingh2011
источник
Когда ваша оболочка bash запускается (и помещает вас в домашний каталог Windows), что echo $HOMEпечатает?
Кит Томпсон
Это перекликается с моим домом Windows, а не домом Cygwin.
gsingh2011
Но используя синтаксис Cygwin, верно? ( /cygdrive/c/Users/fooа не C:\Users\foo)
Кит Томпсон
Да, используя синтаксис Cygwin.
gsingh2011
Что происходит, когда вы печатаете HOME=/home/yourname bash -lв терминале? Если я прав, это должно дать вам правильно работающую оболочку. Обратите внимание, что это диагностика или, в лучшем случае, обходной путь, а не решение; нам все еще нужно выяснить, почему вы $HOMEв первую очередь неверны. Основная проблема заключается в неправильной настройке $HOME; Баш ведет себя правильно.
Кит Томпсон

Ответы:

9

Cygwin FAQ объясняет , как $HOMEустановлено:

При запуске Cygwin из Windows HOMEопределяется следующим образом в порядке уменьшения приоритета:

  • HOME из среды Windows, переведена в форму POSIX.
  • Запись в /etc/passwd
  • /home/USERNAME

При использовании Cygwin из сети (telnet, ssh, ...) HOMEустанавливается с /etc/passwd.

Если для вас HOMEустановлено такое значение, как /cygdrive/c, вероятно, оно было установлено в Windows. Запустите командное окно DOS и введите, set HOMEчтобы проверить, так ли это.

Доступ к общим дискам часто ограничен при запуске из сети, поэтому пользователи домена могут захотеть иметь другое HOMEв среде Windows (на общем диске), чем в /etc/passwd(на локальном диске). Обратите внимание, что ssh учитывает только /etc/passwdигнорирование HOME.

Мое лучшее предположение, что вы испортили свой /etc/passwdфайл. (Домашний каталог Windows есть %USERPROFILE%, а не %HOME%.)

Что grep USERNAME /etc/passwdпечатает (заменяет USERNAMEваше имя пользователя)?

Кит Томпсон
источник
Я добавил вывод в свой вопрос, чтобы его было легче читать. Похоже, там все правильно установлено. Тем не менее, я открыл мои переменные окружения Windows, чтобы посмотреть, была ли переменная% HOME% и была ли она установлена ​​в% USERPATH%. Я удалил его, но это не решило мою проблему. Может быть, нужно перезагрузить?
gsingh2011
1
Вы удалили его из системной панели управления или из командной оболочки Windows, используя set HOME=? Использование панели управления системой, скорее всего, сработает, но перезагрузка может потребоваться даже тогда.
Кит Томпсон
Я удалил его, щелкнув правой кнопкой мыши «Компьютер» в меню «Пуск», выбрав «Свойства», выбрав дополнительные параметры системы, затем переменные среды и затем удалив «ДОМ». Перезапуск был необходим. Теперь Cygwin загружает правильный домашний каталог. Спасибо за помощь.
gsingh2011
1

Если у вас есть .profile или .bash_profile, это происходит из оболочек входа в систему, и вы получаете оболочку входа в систему с момента прохождения --login. Если вы используете источник .profile, то bash не будет источником .bashrc.

Я бы попробовал поставить:

[ -f $HOME/.bashrc ] && source $HOME/.bashrc

в вашем .profile, посмотрите, поможет ли это. Ваш .bashrc должен по-прежнему поступать, как обычно, в других вызовах оболочки без входа в систему.

И не переходи -iна Баш; тебе это не нужно Bash виды хаков, которые притворяются, что вы дали -iв командной строке.

Рич Гомолка
источник
Мои .bash_profile и .profile имеют похожие строки кода. Смотрите мой обновленный вопрос.
gsingh2011
Извините, @Rich Homolka, но я хотел бы знать, почему вы говорите, что -iэто не обязательно. Спасибо.
Сопалайо де Арриерес
@SopalajodeArrierez, если у вас есть интерактивная (не сценарий, но активная в терминале) оболочка, bash делает вид, что вы дали ее -iв командной строке. Попробуйте открыть окно оболочки bash, тогда echo $-вы должны увидеть i(среди, возможно, других флагов)
Rich Homolka
1

Я испытал такое же поведение - вероятно, после установки git (Windows).

В настройках системы я нашел пользовательскую переменную HOME = C: \ Users \ me и сбросил ее на HOME = D: \ home.

user377223
источник